2
我有一個輸入字段,用戶需要選擇日期/時間 根據一年中的時間,本地機器將始終處於GMT或BST狀態。moment.js轉換沒有效果
對於那些誰不知道英國時間的惡作劇:
GMT(格林威治標準時間)始終爲UTC
BST(英國夏令時)爲GMT + 1在夏季
用戶輸入的日期將存儲在設置爲GMT的數據庫中,因此永遠不會偏移時間。因此我需要將用戶輸入的內容轉換爲GMT/UTC。
但是,我的轉換導致返回相同的日期。
我在做什麼錯?
https://jsfiddle.net/r68owagL/
下面是從的jsfiddle
function log(obj) {
var html = "<table>"
for(var member in obj)
{
html += "<tr>"
+ "<td>" + member + ": </td>"
+ "<td>" + obj[member].format("YYYY-MM-DD HH:mm:ss") + "</td>"
+ "</tr>";
}
html += "</table>";
document.body.innerHTML = html;
}
var strDate = '2016-07-14 10:51:00';
var obj = {
n: moment(strDate), //Gives: 2016-07-14 10:51:00
u: moment.utc(strDate), //Gives: 2016-07-14 10:51:00
b: moment.tz(strDate, "Europe/London") //Gives: 2016-07-14 10:51:00
}
log(obj);
關閉足以讓我正確的我的代碼之前轉換爲UTC:https://jsfiddle.net/ r68owagL/1 /,因此將其標記爲答案。基本上設置日期然後.utc()它。而不是.utc()然後設置日期 - 現在有意義我想 - 我這樣做是這樣說的,這是一個UTC日期,而不是這是一個本地日期。 – Morvael
進一步更新,似乎是從dd/mm/yyyy HH:mm:ss的英國格式中讀取中的用戶選定值,結果是moment.js在轉換後再次給出相同的值。 https://jsfiddle.net/r68owagL/2/爲了解決,我必須在將它傳遞給moment()之前手動將格式設置爲yyyy-MM-dd HH:mm:ss。 – Morvael
@Morvael,你會得到一個貶低警告,那個時刻建設回落到JS日期。您需要爲日期指定格式。那麼你將不必手動解析。請參閱http://momentjs.com/guides/#/warnings/js-date/和http://momentjs.com/guides/#/parsing/known-formats/ –