一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
基础小水坑,大佬请划走
直接上图
可见toJSON()会把时间往前减8小时...
这个致命问题,让我的我的一个功能模块,在早八点前只能看到昨天的数据!
错因
toJSON()会进行时区处理,默认为0时区,而北京时间为东八区,所以0时区比我们慢了8小时!
解决办法
直接手动处理
new Date().toLocaleDateString().replaceAll('/', '-');
新问题出现:月、日 补零
HTML5日期选择器的规范规定日期必须采用 yyyy-MM-dd 格式
最终解决办法
var day = new Date().toLocaleDateString().split("/").map(x=>{
if(x.length < 2) return x.padStart(2, '0');
return x;
}).join("-");
方法扩展
- 插件法: Moment.js
moment().format("YYYY-MM-DD");
这够简单明了吧,但是真学不到啥东西,只能说用起来很方便
当然,也也可以自己封装一个Format方法,这里就没必要细说了
- UTC和本地时间之间的时差 计算法
var now = new Date();
now.setMinutes(now.getMinutes() - now.getTimezoneOffset());//猜猜看这一步执行完后now的值是什么?
now = now.toJSON().substring(0, 10);
console.log(now);
说明:从东八区角度,既然toJSON()会扣8小时,那我就提前补上,调用toJSON()后再扣掉,一加一减,正好等于没修改
- 拼接法
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1 + '';//月份默认:0~11,勿忘 + 1
var day = date.getDay() + '';
console.log(`${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`);
.......
方法还有很多,暂时也就想到这么多了,基本够用了
后话
看到这里,很多大佬估计会说,这是啥啊,这么简单的问题还用拿出来说嘛,对于大佬来说也许真的不算啥,但是每个人都是一步一步走出来的,像这种小问题,三下五除二就解决了。但是对于初学者可能会在上面拖很久!总之无论再简单的事,总要付诸行动。