2017-10-08 89 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