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

Posted

技术标签:

【中文标题】在javascript中查找上个月的第一天【英文标题】:Find first day of previous month in javascript 【发布时间】:2010-10-10 22:41:24 【问题描述】:

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

【问题讨论】:

一个更具描述性的标题可能会很好...... ***.com/questions/594054/date-problem-in-java 看起来您之前的问题是针对 java 的。所以不完全是重复的:) 使用moment.jsmoment().subtract(1, "months").startOf("months").toDate() 【参考方案1】:
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);

【讨论】:

请注意,这将失败,例如:firstDayInPreviousMonth(new Date("Mar 31 2009"))。见 cmets:***.com/questions/499838/javascript-date-next-month 如果他在 setMonth() 之前 setDate(1) 不会失败 -1 getYear() 已损坏,您应该改用 getFullYear() 好消息@JK。不知道它是怎么溜进去的。 @Chronix3,首先,getMonthsetMonthDate 构造函数使用从零开始的月份(很奇怪,我知道)所以一月表示为零,二月表示为 1,等等。这里真正的魔力在于 js Date 对象足够灵活,可以通过包装到下个月或上个月来补偿超出范围的日期。例如,Date(2014, 0, 31) = 1 月 31 日,Date(2014, 0, 32) = 2 月 1 日,Date(2014, -1, 25) = 2013 年 12 月 25 日。这是为了便于进行数学运算。例如,我总是可以使用 dt.setDate(dt.getDate() + 1) 增加一天。【参考方案2】:

以下应该有效:

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);

【讨论】:

我喜欢这种方法,但您的解决方案实际上是不正确的。当 getMonth() == 1 时,月份为二月。您想要检查 getMonth() == 0,即使这样也不是必需的,因为 Date 构造函数将接受负值并正常工作。 您忽略了 setMonth 将包装值的事实。 Prestaul 的回答在 1 月份效果很好。 是的,但不幸的是,不能回到天数较少的月份。最好以原子方式构建新日期,而不是零敲碎打。 考虑到 3 月 31 日的例子,你对解剖日期的构造是正确的 - 如果你改变你的答案(我确实发现“盲目减去一个月”行会误导 javascript 的 setXXX 包装)我'很乐意调整我对这个答案的投票。 我同意。如果你取消一月份的测试,你也会得到我的投票。【参考方案3】:

我喜欢这个解决方案。它可能不是最简短的,但它突出了 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 库完成繁重的工作。

你可以看到working Plunk here。

【讨论】:

这很奇怪而且出乎意料。我喜欢它:)【参考方案4】:

这将有助于获取上个月的第一个和最后一个日期。

    function getLastMonth()
        var now = new Date();
        var lastday  = new Date(now.getFullYear(), now.getMonth(), 0);
        var firstday = new Date(lastday.getFullYear(), lastday.getMonth(), 1);
        var lastMonth = firstday.getDate()+'/'+(firstday.getMonth()+1)+'/'+firstday.getFullYear()+' - '+lastday.getDate()+'/'+(firstday.getMonth()+1)+'/'+lastday.getFullYear();
        return lastMonth;
    

【讨论】:

谢谢,正是我想要的。【参考方案5】:

为什么要重新发明***?

使用moment.js 或替代方案之一(Luxon、Day.js 等):

moment().subtract(1, "months").startOf("months").toDate().

【讨论】:

【参考方案6】:

我需要在 BootStrap Min 月中使用当月的乞求,不想全部写出来。

(() => new Date(new Date().getFullYear(), new Date().getMonth(),1, 0))()

【讨论】:

以上是关于在javascript中查找上个月的第一天的主要内容,如果未能解决你的问题,请参考以下文章

在 Java HSQL 数据库中获取上个月的第一天

java中定义一个字符串类型的日期 算出这个月的第一天和下个月的第一天。

sql 使用date_trunc(),add_months(),last_day()查找previuos /下个月的第一天和最后一天

js如何获取上个月第一天和最后一天

在java中如何通过一个月份,获得该月份的第一天的日期?

js代码实现,如何获取当前月份的最后一天