var schedule = {
start_at = Date ( '2017-10-10' ), // Not editable - this data is being handed off by an ORM
...
};
// Mon Oct 09 2017 20:00:00 GMT-0400 (Eastern Daylight Time)
console.log ( schedule.start_at );
是否可以将ISO日期的时间更改为与当前时区的00:00:00匹配,因此在这种情况下,输出将为Tue Oct 10 2017 00:00:00 GMT-0400 (Eastern Daylight Time)
?
我已尝试使用moment.utc ()
,但这只会帮助将日期格式化为字符串。输出必须是一个Date对象,它可以通过其他逻辑传递。
我花了几个小时查阅Moment.js文档,但没有找到任何我可以用来解决这个问题。
(注意:我将这个添加到使用Node.js进行API /服务器开发的缺点列表中。根据我的经验,ISO日期管理一直是个噩梦。)
编辑:
所以我错了。事实证明,schedule.start_at
是设置为Mon Oct 09 2017 20:00:00 GMT-0400 (Eastern Daylight Time)
的Date对象。 [问题改变反映]。我的问题仍然存在,如何在保持指定时间的同时更改日期对象以更改时区?
答案 0 :(得分:0)
这是你在找什么:
moment ( schedule.start_at + ' 00-0400' ).toDate();
var schedule = {
start_at : '2017-10-10'
};
var date = moment ( schedule.start_at ).toDate();
console.log(date.toString());
var date2 = moment ( schedule.start_at + ' 00-0400' ).toDate();
console.log(date2.toString());

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
答案 1 :(得分:0)
我可以使用moment.clone()
和moment.add()
的组合来完成此任务。
var date = moment ( schedule.start_at );
var clone = date.clone ();
clone.add ( date.toDate ().getTimezoneOffset (), 'minutes' );
clone.add ( 0 - clone.utcOffset (), 'minutes' );
现在输出已根据需要成功设置为Tue Oct 10 2017 00:00:00 GMT-0400 (Eastern Daylight Time)
。