我有字符串“ 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);
但这无法正常工作,并说“无效日期”。
答案 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。