在不更改指定时间的情况下更改JS日期的时区?

时间:2017-10-08 05:03:55

标签: javascript momentjs

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对象。 [问题改变反映]。我的问题仍然存在,如何在保持指定时间的同时更改日期对象以更改时区?

2 个答案:

答案 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;
&#13;
&#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)