注意:截至2022-03年,此答案仍在获得支持。此刻.js库已弃用。这是两个主要的替代方案:Luxon和Day.js,其他的则在弃用链接中提到。
卢克森
Luxon可以被认为是Moment的进化。它由艾萨克·坎布隆(Isaac Cambron)撰写,他是Moment的长期贡献者。请阅读为什么Luxon存在?以及Luxon文档中的“For Moment”用户页面。
地点: 提供国际 时区: 提供国际
日.js
Day.js旨在成为Moment.js的极简主义替代品,使用类似的API。它不是一个直接的替代品,但如果你习惯于使用Moment的API并希望快速行动,请考虑使用Day.js。
区域设置:可单独导入的自定义数据文件 时区:通过插件提供国际
我使用Day.js因为尺寸差异,但Luxon更容易处理。
网络上几乎每个to-ISO方法都会通过在输出字符串之前应用转换为“Z”ulu时间(UTC)来删除时区信息。浏览器的本机 .toISOString() 也会删除时区信息。
这会丢弃有价值的信息,因为服务器或收件人始终可以将完整的ISO日期转换为祖鲁时间或所需的任何时区,同时仍然获取发件人的时区信息。
我遇到过的最好的解决方案是使用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() 这样的函数,然后其结果可以传递到时刻。
像这样格式化的日期字符串是JSON编译的,并且非常适合存储在数据库中。Python和C#似乎很喜欢它。