使用Moment.js格式化日期时显示日期差一天的问题排查
解决Moment.js日期显示差一天的问题
嘿,这个坑我之前踩过!大概率是时区处理不一致搞的鬼,我给你拆解下原因和解决办法:
问题根源
你传入的date是EDT时区(GMT-0400)的Sat May 05 2018 00:26:53,对应的UTC时间是May 05 2018 04:26:53。但Moment.js的默认行为是:把传入的Date对象转换成代码运行环境的本地时区来格式化。
如果你的运行环境(比如浏览器、Node.js服务)的本地时区比EDT早很多,这个UTC时间在本地时区就会跨到5月6日的午夜,最终格式化结果就变成了May 6th。
快速解决办法
想要严格按照原日期的时区(EDT)来格式化,而不是本地时区,直接用moment.parseZone()替代moment()就好:
moment.parseZone(date).format('MMMM do YYYY, h:mma')
这个方法会保留原日期的时区偏移信息,不会转换成本地时区,格式化后就能得到你预期的May 5th 2018, 12:26am。
其他可选方案
如果你想统一用UTC时间格式化:
moment(date).utc().format('MMMM do YYYY, h:mma')这会输出
May 5th 2018, 4:26am(对应UTC时间)。如果需要转换成特定时区(比如纽约时区),可以用
moment-timezone库:moment(date).tz('America/New_York').format('MMMM do YYYY, h:mma')
内容的提问来源于stack exchange,提问作者picklechips
相关产品推荐
相关产品推荐

