资讯专栏INFORMATION COLUMN

js 日期对象 31 号 setMonth 的锅

jlanglang / 643人阅读

摘要:微信公众号分享前端后端开发等相关的技术文章,热点资源,全栈程序员的成长之路。福利详情请点击免费资源分享

前言

需求:获取当前日期的前一个月份

当月有 31 天时,JS 日期对象 setMonth 问题

1. 一般做法

当前日期如果不是 31 号, 是没问题的,是 31 号就会有问题:

// 比如今天是 2018-09-30 号,前一个月应该是 2018-08-30 
let now = new Date(new Date("2018-09-30").setMonth(new Date("2018-09-30").getMonth() - 1))
console.log("now :", now.toLocaleString())
// now : 2018/8/30 上午8:00:00

// 比如今天是 2018-10-31 号,前一个月没有 31 号,所以结果 2018-10-01:
let now = new Date(new Date("2018-10-31").setMonth(new Date("2018-10-31").getMonth() - 1))
console.log("now :", now.toLocaleString())
// now : 2018/10/1 上午8:00:00
2. 正确的方法: 2.1 方法一

原理: 当前时间减去当前时间的天数

function initLastMonth(date) {
            let monthDate = new Date(date);
            let newDate = new Date(monthDate.getTime() - 24 * 60 * 60 * 1000 * monthDate.getDate())
            console.log("newDate :", newDate.toLocaleString())
          return newDate
}
initLastMonth("2018-10-31")
//  newDate : 2018/9/30 上午8:00:00
2.2 方法二

原理: setMonth 之前先 setDate(1)

function initLastMonth(date) {
            const now = new Date(date);
            now.setDate(1)
            now.setMonth(now.getMonth() - 1)
            console.log(now.toLocaleString()) 
            return now
        }
initLastMonth("2018-10-31")
// 2018/9/1 上午8:00:00
最后

技术文章更新地址:github

全栈开发 有兴趣的朋友可以扫下方二维码关注我的公众号,我会不定期更新有价值的内容。

微信公众号:BiaoChenXuYing
分享 前端、后端开发等相关的技术文章,热点资源,全栈程序员的成长之路。

关注公众号并回复 福利 便免费送你视频资源,绝对干货。

福利详情请点击: 免费资源分享--Python、Java、Linux、Go、node、vue、react、javaScript

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98881.html

相关文章

  • JS 在获取当前月的最后一天遇到的坑

    摘要:想阅读更多优质文章请猛戳博客一年百来篇优质文章等着你为了更好的讲这节的内容,提示一个处理日期的小技巧,想获取上个月最后一天,只需要设置参数为即可。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 为了更好的讲这节的内容,提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。 var endDate = new Date();...

    zollero 评论0 收藏0
  • 查看指定日期是本年和本月的第几周

    摘要:约定星期一是一周的开始。参考给定的日期是第本年中的第几天给定的日期是今年的第几周给定的日期是本年的第几天复制对象,以免修改覆盖。号就是星期天第一周的周未是号第一周的周未是几号计算今天是本月的第几周给定的日期是几号得到当前的号是星期几。 约定:星期一是一周的开始。其中的计算结果以如下网站为准。参考:https://wannianli.tianqi.com/... //给定的日期是第本年中...

    roundstones 评论0 收藏0
  • 需要知道的JS日期知识,都在这了

    摘要:实际上是格林威治标准时间的同义词默认情况下,中的几乎每个日期方法除了一个都是本地时间。如果你住在格林威治标准时间晚的的地区,你会得到一个日期是月日。需要知道对象日期方法。 为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! JS中的 Date 很奇怪。当我们需要处理日期和时间的时候比较麻烦,经常借助像date-fns和 Mom...

    testbird 评论0 收藏0
  • JavaScript中Date学习记录_013

    摘要:中对象学习记录实例用来处理日期和时间。的对象提供了数个时间的方法,也相应提供了当地时间的方法。而当地时间则是指执行的客户端电脑所设置的时间。构造函数中国标准时间代表自年月日世界标准时间起经过的毫秒数。中国标准时间表示日期的字符串值。 JavaScript中Date对象学习记录 Date 实例用来处理日期和时间。Date对象基于1970年1月1日(世界标准时间)起的毫秒数。 JavaSc...

    hersion 评论0 收藏0
  • JS基础篇--日期Date详解与实例扩展

    摘要:实际上,如果直接将表示日期的字符串传递给构造函数,也会在后台调用方法,例如下面的代码跟前面的是等价的。构造函数构造函数会模仿但有一点不同的是,日期和时间都是基于本地时区而非来创建。兼容性问题啊其原因就是非标准日期格式。 一:Date类型介绍 要创建一个日期对象,使用new操作符和Date构造函数即可: var now = new Date(); Date.parse()方法 其中Da...

    Apollo 评论0 收藏0

发表评论

0条评论

jlanglang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<