2017-10-08 47 views
0
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)更改JS日期上的时区而不更改指定的时间?

我已经使用moment.utc()进行了实验,但这只帮助将日期格式化为字符串。输出需要是一个Date对象,它可以通过一些进一步的逻辑传递。

我花了几个小时查找Moment.js文档,但没有发现任何可以用来解决此问题的方法。

(关注:我在如何使用Node.js的API/Server开发增加这利弊清单ISO日期管理一直是我的经验,这样的噩梦。)

编辑:

所以我错了。事实证明,schedule.start_at是一个Date对象,设置为Mon Oct 09 2017 20:00:00 GMT-0400 (Eastern Daylight Time)。 [问题改变反映]。我的问题仍然存在,我如何修改日期对象以在保持指定时间的同时更改时区?

回答

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)

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>

+0

更新了问题。我想补充一点,我正在寻找可以补偿任何时区的答案,也就是说。没有硬编码。感谢您的贡献。 – IzzyCooper