注:截至2022-03年,这个答案仍在获得点赞。moment.js库已弃用。这是两个主要的替代方案:Luxon和Day.js,其他的在弃用链接中提到。
勒克桑
《Luxon》可以看作是《Moment》的演变。作者是
Isaac Cambron, Moment的长期撰稿人。请阅读为什么
国际光子存在吗?以及Luxon中的For Moment用户页面
文档。
区域:提供国际时区:提供国际时区
Day.js
Day.js被设计成一个极简的Moment.js的替代品,使用
类似的API。它不是一个随意的替代品,但如果你习惯了
如果你正在使用Moment的API,想要快速上手,可以考虑使用
Day.js。
区域设置:可单独导入的自定义数据文件
区域:通过插件提供
我使用Day.js是因为大小不同,但是Luxon更容易处理。
在web上,几乎每一个to- iso方法都在输出字符串之前应用到“Z”ulu时间(UTC)的转换来删除时区信息。浏览器的本机. toisostring()也会删除时区信息。
这将丢弃有价值的信息,因为服务器或接收方总是可以将完整的ISO日期转换为Zulu时间或所需的任何时区,同时仍然可以获得发送方的时区信息。
我遇到的最好的解决方案是使用Moment.js javascript库,并使用以下代码:
获取带有时区信息和毫秒的当前ISO时间
now = moment().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T20:11:11.234+0100"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T19:11:11.234+0000"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss") + "Z"
// "2013-03-08T19:11:11Z" <- better use the native .toISOString()
获取原生JavaScript Date对象的ISO时间,其中包含时区信息,但不包含毫秒
var current_time = Date.now();
moment(current_time).format("YYYY-MM-DDTHH:mm:ssZZ")
这可以与Date.js结合,以获得Date.today()这样的函数,其结果可以传递给moment。
像这样格式化的日期字符串是JSON编译器,很适合存储到数据库中。Python和c#似乎喜欢它。