当前位置:  开发笔记 > 编程语言 > 正文

Javascript日期:下个月

如何解决《Javascript日期:下个月》经验,为你挑选了4个好方法。

我一直在为项目使用Javascript的日期,但今天注意到我之前工作的代码不再正常工作.下面的代码不是按预期产生二月,而是产生三月.

我的代码看起来像这样:

current = new Date();
current.setMonth(current.getMonth()+1); //If today is Jan, expect it to be Feb now

这段代码每天工作到今天.这是一个Javascript错误还是我错误的方式?



1> paxdiablo..:

您可能会发现您将日期设置为2009年2月31日(如果今天是1月31日)并且Javascript会自动将其设置为3月初.

检查当月的日期,我希望它是1,2或3.如果它与您添加一个月之前不一样,请回滚一天,直到月份再次变化.

这样,"1月的最后一天"成为"2月的最后一天".

编辑:

罗纳德,基于你对其他答案的评论,你可能想要避开边缘案例行为,例如"当我试图制作2月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日.我知道,更多的代码,但我已经厌倦了编写效率的技巧,更喜欢可读性,除非明确要求不这样做.



2> Brannon..:

相反,尝试:

var now = new Date();
current = new Date(now.getFullYear(), now.getMonth()+1, 1);


`getYear`已弃用,无法正常运行.需要使用`getFullYear`代替.

3> Terra Ashley..:

我正在寻找一个简单的单行解决方案,以通过数学获得下个月,所以我不必查找javascript日期函数(我的心理懒惰).很奇怪,我在这里找不到一个.

我克服了短暂的懒惰,写了一篇,并决定分享!

解:

(new Date().getMonth()+1)%12 + 1

只是要清楚为什么这个有用,让我打破魔法吧!

它获得当前月份(以0..11格式),下个月递增1,并将其包裹到12通过模数的边界(11%12 == 11; 12%12 == 0).这将以相同的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

所以你有它.



4> Julio..:

您可以使用date.js库:

http://code.google.com/p/datejs/

就这样做吧

Date.today().next().month();

您将获得今天+ 1个月(包括天)的确切值

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有