JS 中 new Date()的踩坑记录

1. IOS不兼容YYYY-MM-DD这样的格式
new Date('2023-1-1'); // Invalid Date

IOS目前还理解不了YYYY-MM-DD这样的格式,只支持YYYY/MM/DD。

2. 月份的索引是以0为起点的,而年份、日期却不是
new Date(2023,5,29); // Thu Jun 29 2023 00:00:00 GMT+0800 (中国标准时间)

得到的是一个反直觉的结果:2023年6月29日!!!

导致setMonth()方法也是从0开始设置的。

new Date("2023/05/29"); // Mon May 29 2023 00:00:00 GMT+0800 (中国标准时间)

注意这种写法,月份是正常理解下的。

3. 年份小于100,默认以19xx或20xx开头

当你需要格式化公元元年-公元100年之间的时间时

new Date(50,2,1); // Wed Mar 01 1950 00:00:00 GMT+0800 (中国标准时间)

如果你需要获得公元50年2月1日,必须这么写

new Date('0050-02-01'); // Tue Feb 01 0050 08:05:43 GMT+0805 (中国标准时间)

而且不能轻易添加时间

new Date('0050-02-01 00:00:00'); // Wed Feb 01 1950 00:00:00 GMT+0800 (中国标准时间)

还有一种情况

new Date('10-11-12') // Thu Oct 11 2012 00:00:00 GMT+0800 (中国标准时间)

这种情况下就不是1910年,也不是公元10年,而变成了2012年,这时候的排列就变成了月-日-年,而且还增加了2000年。
所以当年份为二位数的时候,构造函数把最后面那个当作年份,而且默认它为20xx年。

4. ‘-’和‘/’存在时区差异
new Date('2023-04-29'); // Sat Apr 29 2023 08:00:00 GMT+0800 (中国标准时间)
new Date('2023/04/29'); // Sat Apr 29 2023 00:00:00 GMT+0800 (中国标准时间)

两种格式返回的时间是不同的,相差了8个小时。

所以建议最好是加上小时和分钟

new Date('2023-04-29 00:00:00'); // Sat Apr 29 2023 00:00:00 GMT+0800 (中国标准时间)
new Date('2023/04/29 00:00:00'); // Sat Apr 29 2023 00:00:00 GMT+0800 (中国标准时间)
5. 一位数的问题

这种只针对‘-’格式的问题

new Date("2022-06-01"); // Wed Jun 01 2022 08:00:00 GMT+0800 (中国标准时间)
new Date("2022-6-01"); // Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间)
new Date("2022-6-1"); // Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间)

一位数和二位数的差异,相差了8个小时。

6. 建议

如果是年份小于100,写法如下:

new Date('0050-02-01'); // Tue Feb 01 0050 08:05:43 GMT+0805 (中国标准时间)

如果年份大于100,写法如下:

new Date('150/02/01'); // Sun Feb 01 0150 00:00:00 GMT+0805 (中国标准时间)
new Date(150,02,01); // Sun Feb 01 0150 00:00:00 GMT+0805 (中国标准时间)
new Date("2022/6/1"); // Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间)
new Date("2022/6/1 00:00:00"); // Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值