2016-12-16 67 views
3

我有一個從我的UI中設置的日期,從這個angularjs date picker。它被設置爲一個moment.js對象,它包含我的時區(東部)的GMT偏移量。當我將時刻對象提交回我的Asp.net Core端點時,時間將轉換爲沒有偏移量的時間。因此,例如,當我檢查日期在JavaScript時刻對象對象:我該如何修復MomentJS和Asp.net Core之間的時差

timeIn: Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time) 

當我檢查我的.NET的核心對象:

TimeIn: 12/16/2016 10:00:00AM 

我想在後端的數據顯示作爲在UI上輸入的確切時間,而不考慮時區。因此,如果他們輸入上午5:00,則後端應存儲的時間爲上午5:00。當時刻對象轉換爲JSON發送到後端時,它似乎會更改該值。當我在UI上做一個JSON.stringify()我timeIn對象,我得到:

"2016-12-16T10:00:00.000Z" 

有沒有一種方法,去除其中的時區偏移數據的前端,使輸入的時間是與發送的時間完全相同?

P.S.我知道有很多關於時間的問題,但我無法爲我的案子找到合適的問題。感謝您的幫助

編輯:我正在使用.net DateTime對象接受javascript日期對象。

+0

如果您切換到的DateTimeOffset你的生活將變得更加容易。 – GlennSills

+0

我相信DateTimeOffset會識別單個時間點,因此需要考慮時間區域。例如,如果用戶輸入早上5點的時間並且他們在太平洋時區,然後東部時區的主管查看該時間條目,則我的應用*應該*顯示上午5點給主管,而不是上午8點。我需要輸入的時間向任何用戶顯示相同的內容,無論他們在哪個時區。 –

回答

0

該格式包含5位:

Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time) 

而且我們可以假設20到最小,降落在今年安全進入。獲取下一次出現的空格字符並從那裏分離。

注:這是完全基於假設,但它看起來像它的效果更好。

你可以這樣做:

var time = "Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)"; 
 
console.log(time.substr(0, time.indexOf(" ", 20)));

此外,參照How to get the nth occurrence in a string?,就可以達到更好的東西。

function getPosition(string, subString, index) { 
    return string.split(subString, index).join(subString).length; 
} 

我們需要的空間第五屆發生:

function getPosition(string, subString, index) { 
 
    return string.split(subString, index).join(subString).length; 
 
} 
 
var time = "Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)"; 
 
console.log(time.substr(0, getPosition(time, " ", 5)));

第二種方法似乎是一個更好的比第一。

第三種方法是使用Moment.js庫的時間格式化成淨接受的格式:

timeIn = timeIn.format('MM-DD-YYYY h:mm:ss'); 
+0

看起來像是行得通。我發現了另一種使用moment.js庫的方法。 timeIn = timeIn.format('MM-DD-YYYY h:mm:ss');這種格式被.net接受,並且正常進入。 –

+0

@big_water真棒......':D'你想添加到我的答案並接受它?你的願望......':)' –

+0

我會這麼做的!雖然我不認爲moment.js庫會以片段運行,除非你知道某種方式? –

相關問題