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

在javascript中查找上个月的第一天

如何解决《在javascript中查找上个月的第一天》经验,为你挑选了3个好方法。

给定一个日期对象,如何在javascript中获取上个月的第一天



1> Prestaul..:
function firstDayInPreviousMonth(yourDate) {
    var d = new Date(yourDate);
    d.setDate(1);
    d.setMonth(d.getMonth() - 1);
    return d;
}

编辑:好吧......我肯定在这里学到了一些东西.我认为这是涵盖所有案例的最简单的解决方案(是的,它确实适用于1月份):

function firstDayInPreviousMonth(yourDate) {
    return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1);
}


@ Chronix3,首先,`getMonth`,`setMonth`和`Date`构造函数使用从零开始的月份(奇怪,我知道)所以1月表示为零,2月表示为1,等等.真正的魔力在于js Date对象足够灵活,可以通过换行到下一个月或前几个月来补偿超出范围的日期.例如,`Date(2014,0,31)`= Jan 31,`Date(2014,0,32)`= Feb 1,`Date(2014,-1,25)`= 2013年12月25日.这是为了允许轻松执行数学运算.例如,我总是可以使用`dt.setDate(dt.getDate()+ 1)`增加一天.
-1 getYear()坏了你应该使用getFullYear()代替

2> paxdiablo..:

以下应该有效:

now = new Date();
if (now.getMonth() == 0) {
    current = new Date(now.getFullYear() - 1, 11, 1);
} else {
    current = new Date(now.getFullYear(), now.getMonth() - 1, 1);
}

请记住,月份是零基础,所以12月是11而不是12.

但是,正如其他人所指出的那样,即使作为原子构造函数的一部分,月份也会包含,所以以下内容也是可能的:

now = new Date();
firstDayPrevMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);



3> Michael Oryl..:

我喜欢这个解决方案。它可能不是最简短的,但是重点介绍了并非所有人都会熟悉的Date()对象上的setDate()方法的一些功能:

function firstDayPreviousMonth(originalDate) {
    var d = new Date(originalDate);
    d.setDate(0); // set to last day of previous month
    d.setDate(1); // set to the first day of that month
    return d;
}

它利用以下事实:.setDate(0)会将日期更改为指向上个月的最后一天,而.setDate(1)会将日期更改为(进一步)指向该月的第一天。它让核心Javascript库发挥了巨大的作用。

您可以在这里看到正在工作的Plunk。

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