我一直在一个项目中使用Javascript的日期,但今天注意到我以前工作的代码不再正常工作。下面的代码不是像预期的那样生成Feb,而是生成3月。
我的代码看起来像这样:
current = new Date();
current.setMonth(current.getMonth()+1); //If today is Jan, expect it to be Feb now这段代码每天都在工作,直到今天。这是一个Javascript错误,还是我做错了?
发布于 2009-02-01 00:07:48
您可能会发现您将日期设置为2009年2月31日(如果今天是1月31日),而Javascript会自动将其滚动到3月初。
检查月份的日期,我希望它是1、2或3。如果它与您添加一个月之前不同,请回滚一天,直到月份再次更改。
这样,“一月份的最后一天”就变成了“二月份的最后一天”。
编辑:
Ronald,根据您对其他答案的评论,您可能希望避免边缘情况行为,例如“当我尝试创建Feb 30时会发生什么”或“当我尝试创建2009/13/07 (yyyy/mm/dd)时会发生什么”(即使对于我的解决方案,最后一个问题也可能是一个问题,所以您应该对其进行测试)。
相反,我会显式地为这些可能性编写代码。由于您并不关心月份中的哪一天(您只希望下个月的年份和月份是正确的),下面这样的内容就足够了:
var now = new Date();
if (now.getMonth() == 11) {
var current = new Date(now.getFullYear() + 1, 0, 1);
} else {
var current = new Date(now.getFullYear(), now.getMonth() + 1, 1);
}这就为您提供了12月份任何一天的第二年1月1日和其他任何一天的次月1号。更多的代码,我知道,但我早就厌倦了为提高效率而编写代码的技巧,除非有明确的要求,否则我更喜欢可读性。
发布于 2009-02-01 00:10:09
相反,请尝试:
var now = new Date();
current = new Date(now.getFullYear(), now.getMonth()+1, 1);发布于 2014-11-20 02:34:34
我正在寻找一个简单的单行解决方案,以便通过数学获得下个月,这样我就不必查找javascript的日期函数(对我来说是精神上的懒惰)。奇怪的是,我在这里找不到。
我克服了我短暂的懒惰,写了一篇,并决定分享!
解决方案:
(new Date().getMonth()+1)%12 + 1只是为了弄清楚为什么这样做,让我来解释一下它的魔力!
它获取当前月份(格式为0..11 ),为下一个月增加1,并通过模数(11%12==11;12%12==0)将其包装为12的边界。这将以相同的0..11格式返回下个月,因此转换为Date()格式将很容易识别(1..12):只需再次添加1即可。
概念验证:
> for(var m=0;m<=11;m++) { console.info( "next month for %i: %i", m+1, (m+1)%12 + 1 ) }
next month for 1: 2
next month for 2: 3
next month for 3: 4
next month for 4: 5
next month for 5: 6
next month for 6: 7
next month for 7: 8
next month for 8: 9
next month for 9: 10
next month for 10: 11
next month for 11: 12
next month for 12: 1现在你就知道了。
https://stackoverflow.com/questions/499838
复制相似问题