简而言之,我希望有时间尊重服务器的时区。我已将机器的时区设置为阿拉斯加,但我将布里斯班时区字符串传递给 moment。现在我需要moment.toDate
返回与我在 moment 构造函数中传递的时区相同的日期实例;例如
m = moment("2016-11-20T08:00:00+10:00")
m.format() // "2016-11-20T08:00:00+10:00"
m.toDate() // Sat Nov 19 2016 13:00:00 GMT-0900 (AKST)
我想得到一个Date
从输入时区那一刻开始的实例;例如以某种方式得到toDate
回来Sun Nov 20 2016 08:00:00 GMT+1000 (AEST)
.
FWIW我尝试过使用和不使用相同的代码moment.tz.setDefault
虽然它正确地改变了format
结果,toDate
始终使用机器的时区!
Update
我需要这种行为的原因是一些 JavaScript 库和控件不理解moment
并且只与Date
当他们返回时,时间/日期会出现偏差。我当前正在处理的一个示例是 jQuery UI 日期选择器控件。我希望日期选择器显示服务器上(或特定时区)上的当前日期。
提前致谢。
The Date
对象内部表示 UTC 时间,并且可以only投影时使用其运行的计算机的时区。
完全没有办法生产Date
使用任意时区的对象。您可能遇到的任何尝试操纵Date
对象(例如通过添加或减去时区偏移量)从根本上来说是有缺陷的。
Moment 本身具有出色的时区支持,包括用于处理命名时区而不仅仅是时区偏移的 moment-timezone 扩展。但一旦你回到一个Date
对象 - 你又回到了该对象行为的支配之下。
抱歉,但没有办法实现您的要求。也许你可以详细说明why如果您想这样做,我可以推荐一个解决方法。
更新:关于your更新,通常有一种机制可以从日期选择器中获取值,如下所示text,而不是作为日期对象。以 jQuery UI 日期选择器控件为例,onSelect
事件已经以文本形式提供给您,或者您可以简单地致电.val()
代替.datepicker('getDate')
将文本移出字段。一旦你有了文本值,你就可以用你喜欢的方式解析它。
同样,设置值时,不一定需要Date
目的。您可以将文本框的值设置为字符串,也可以将字符串传递给setDate http://api.jqueryui.com/datepicker/#method-setDate功能。
在大多数情况下,您不必经历Date
目的。但如果由于某种原因你这样做了,那么你需要用一些疯狂的东西人为地构建一个,比如:
var d = new Date(m.format('YYYY/MM/DD'));
通常情况下,我会反对这样做 - 但如果它只是为了将值传递给 UI 控件,那么它可能没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)