我一直在一个项目中使用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号。更多的代码,我知道,但我早就厌倦了为提高效率而编写代码的技巧,除非有明确的要求,否则我更喜欢可读性。
https://stackoverflow.com/questions/499838
复制相似问题