We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
new Date('2023-1-1');
这行代码无论在Macbook中还是iPhone中的Safari浏览器,返回的都是Invalid Date, Safari浏览器目前还理解不了YYYY-MM-DD这样的格式,只支持YYYY/MM/DD。这就造成你在Windows环境下的代码正常原型,而你的其他部分用户异常显示;
new Date(2023,1,1);
得到的是一个反直觉的结果:2023年2月1日!!!
Wed Feb 01 2023 00:00:00 GMT+0800 (中国标准时间)
同样的,对应的方法.setMonth()也是从0开始设置的。就……很无语!
一般的应用可能碰不到这样的情况,毕竟现在是21世纪了,我们在应用中看到的大部分时间都是现代的。但是当你需要格式化公元元年-公元100年之间的时间,你就该懵了! 举个栗子:
能正常返回时间对象
但是当年份调到了公元50年2月1日
new Date(50,2,1);
那么直接返回了1950年
Wed Mar 01 1950 00:00:00 GMT+0800 (中国标准时间)
是的,Date直接帮你加了1900年的时间!如果需要获得公元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 (中国标准时间)
你就说,它任性吧?!别气馁,别忘了标题还有20xx的情况
new Date('10-11-12');
Thu Oct 11 2012 00:00:00 GMT+0800 (中国标准时间)
就是说,当年份为2位数的时候,这种字符串格式的,构造函数把最后面那个当作年份,而且默认它为20xx年
你相信吗?'2018-01-01'和'2018/01/01'是不同的,存在一定时差
new Date('2018-01-01');
Mon Jan 01 2018 08:00:00 GMT+0800 (中国标准时间)
然而……
new Date('2018/01/01');
Mon Jan 01 2018 00:00:00 GMT+0800 (中国标准时间)
看到差异了吗?两种格式返回的时间是不同的,查了个北京时间与格林尼治时间的时差,8个小时啊!
中文文档:https://dayjs.gitee.io/zh-CN/ github: https://github.com/iamkun/dayjs/
中文文档:https://moment.nodejs.cn/ github: https://github.com/moment/moment
The text was updated successfully, but these errors were encountered:
No branches or pull requests
奇怪的 new Date()
1. Safari浏览器不兼容YYYY-MM-DD这样的格式
这行代码无论在Macbook中还是iPhone中的Safari浏览器,返回的都是Invalid Date, Safari浏览器目前还理解不了YYYY-MM-DD这样的格式,只支持YYYY/MM/DD。这就造成你在Windows环境下的代码正常原型,而你的其他部分用户异常显示;
2、月份的索引是以0为起点的,而年份、日期却不是
得到的是一个反直觉的结果:2023年2月1日!!!
同样的,对应的方法.setMonth()也是从0开始设置的。就……很无语!
3、年份小于100,默认以19xx或20xx开头
一般的应用可能碰不到这样的情况,毕竟现在是21世纪了,我们在应用中看到的大部分时间都是现代的。但是当你需要格式化公元元年-公元100年之间的时间,你就该懵了!
举个栗子:
能正常返回时间对象
但是当年份调到了公元50年2月1日
那么直接返回了1950年
是的,Date直接帮你加了1900年的时间!如果需要获得公元50年2月1日,得这么写
返回:
请千万不要尝试添加时间,因为你又要裂开了……
返回:
你就说,它任性吧?!别气馁,别忘了标题还有20xx的情况
返回:
就是说,当年份为2位数的时候,这种字符串格式的,构造函数把最后面那个当作年份,而且默认它为20xx年
4、日期初始化不统一,存在时区差异
你相信吗?'2018-01-01'和'2018/01/01'是不同的,存在一定时差
返回:
然而……
返回:
看到差异了吗?两种格式返回的时间是不同的,查了个北京时间与格林尼治时间的时差,8个小时啊!
解决方法
1. 简单使用new Date()时,注意避免以上情况。
2. 使用第三方库 dayjs,轻量的 moment.js。
3. 使用 moment.js
The text was updated successfully, but these errors were encountered: