1

我有代表日期的字符串“ 18/04/19 5:17 PM EDT ”。我正在使用时刻和附加时刻时区,我需要将此刺痛转换为时间戳。

我正在尝试以下方法:

var date = moment("18/04/19 5:17 PM EDT").format('DD/MM/YY h:m a z');
alert(date);

但这不起作用并说“无效日期”。

4

1 回答 1

3

请注意moment(String)

从字符串创建时刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后检查字符串是否与RFC 2822 日期时间new Date(string)格式匹配,然后在未找到已知格式的情况下回退。

警告:解析字符串的浏览器支持不一致。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的内容在其他浏览器中无效。

对于解析除 ISO 8601 字符串以外的任何内容的一致结果,您应该使用String + Format

所以你得到Invalid Date是因为你的输入既不是 ISO 8601 也不是 RFC 2822 认可的格式,那么你必须在解析它时提供格式参数。

moment(String, String)不接受'z'令牌,因此您必须使用 moment-timezone 来使用 zone 解析您的输入,请参阅Parsing in Zone文档:

构造函数采用与时刻构造函数相同的moment.tz所有参数,但使用最后一个参数作为时区标识符

您可以使用文档的显示部分中format()列出的其他方法(例如)来显示时刻对象的值。valueOf()

这是一个现场样本:

var date = moment.tz("18/04/19 5:17 PM EDT", 'DD/MM/YY h:m A', 'America/New_York');
console.log(date.valueOf()); // 1555622220000
console.log(date.format());  // 2019-04-18T17:17:00-04:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>

作为旁注,请记住时区缩写不明确,请参阅此处了解更多信息。

于 2019-04-18T22:45:56.317 回答