我想将本地日期对象转换为另一个时区的日期对象,这就是我所拥有的:
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").format("M/DD/YYYY h:mm a")
>>"8/05/2016 7:30 am"
但如果我这样做
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").toDate()
>>Thu Aug 04 2016 16:30:37 GMT-0700 (PDT)
正如您所看到的,我可以将时刻对象格式化为我喜欢的格式,但如何将其再次返回到日期对象?
答案 0 :(得分:0)
...到另一个时区的日期对象
JavaScript Date
对象不能代表另一个时区。它只是一个时间戳,以1970-01-01午夜UTC时间的毫秒数为单位,您可以使用.valueOf()
或.getTime()
查看。
当您在.toString()
对象上调用Date
或以其他方式将其强制转换为字符串时(例如在调试控制台中显示它时),它会将时间戳转换为本地时区环境正在运行。
因此,尽管您使用时刻区域进行了任何转换,但您仍然在谈论同一时刻,因此在生成的Date
对象中将具有相同的时间戳。
换句话说,这些都是等价的:
moment("2016-08-04T23:30:37Z").toDate()
moment.utc("2016-08-04T23:30:37Z").toDate()
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").toDate()
new Date("2016-08-04T23:30:37Z")
...因为它们都具有相同的内部时间戳1470353437000
moment("2016-08-04T23:30:37Z").valueOf() // 1470353437000
moment.utc("2016-08-04T23:30:37Z").valueOf() // 1470353437000
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").valueOf() // 1470353437000
new Date("2016-08-04T23:30:37Z").valueOf() // 1470353437000