如何使用moment js将字符串转换为时间戳?

时间:2019-04-18 21:34:31

标签: javascript datetime momentjs datetime-format moment-timezone

我有字符串“ 19 EDT (美国东部时间)”,它代表一个日期。 我正在使用moment and the add-on moment-timezone,需要将此字符串转换为时间戳。

我正在尝试以下方法:

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

但这无法正常工作,并说“无效日期”。

1 个答案:

答案 0 :(得分:2)

请注意,moment(String)

  

从字符串创建时刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后检查字符串是否与RFC 2822 Date time格式匹配,然后放回{{1 }}(如果找不到已知格式)。

     

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

     

要获得一致的结果以解析ISO 8601字符串以外的任何内容,应使用String + Format

因此您将获得new Date(string),因为您的输入既不是ISO 8601也不是RFC 2822公认的格式,那么您在解析它时必须提供format参数。

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

  

'z'构造函数采用与矩构造函数相同的所有参数,但将最后一个参数用作time zone identifier

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

这里有一个现场样本:

moment.tz
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

请注意,时区缩写不明确,请参见here