注意:截至 2022 年 3 月,此答案仍在获得支持。moment.js库已弃用。这是两个主要的替代方案:Luxon和Day.js,其他在弃用链接中提到。
卢克森
Luxon 可以被认为是 Moment 的演变。它由
Moment 的长期撰稿人Isaac Cambron撰写。请阅读为什么 Luxon 存在?以及 Luxon 文档中的For Moment 用户页面。
地区:国际提供时区:国际提供
Day.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() 这样的函数,然后可以将其结果传递给 moment。
像这样格式化的日期字符串是 JSON 兼容的,并且很适合存储到数据库中。Python 和 C# 似乎很喜欢它。