2013-05-14 27 views
3

我將發送代表本週開始和結束的2個日期範圍。然而日期的轉換並不是我期待的服務器端。開始日期很好,但結束日期是一天,我不明白爲什麼?由JSON轉換而來的日期不正確

CONSOLE.LOG輸出

Date {Mon May 13 2013 00:00:00 GMT+0100 (GMT Daylight Time)} 
Date {Sun May 19 2013 23:59:59 GMT+0100 (GMT Daylight Time)} 

創建上述輸出的JS

var startOfWeek = moment().day(1).hour(0).minute(0).second(0).toDate() 
var endOfWeek = moment().day(7).hour(23).minute(59).second(59).toDate() 
console.log(startOfWeek, endOfWeek) 

JSON

{"Start":"2013-05-12T23:00:00.000Z","End":"2013-05-18T23:00:00.000Z"} 

C#

Start: {13/05/2013 00:00:00} 
End: {18/05/2013 23:59:59} 

控制器

public HttpResponseMessage GetAllCampaignsByDate(DateRange _dateRange) 
{ 
} 

模型

public class DateRange 
{ 
    private DateTime m_start; 
    private DateTime m_end; 

    public DateTime Start 
    { 
     get{ return m_start; } 
     set { m_start = value.ToLocalTime(); } 
    } 

    public DateTime End 
    { 
     get { return m_end; } 
     set { m_end = value.ToLocalTime().AddSeconds(-1); } 
    } 
} 
+0

您的結束日期結束爲'{19/05/2013 23:59:59}'? – mattytommo 2013-05-14 15:18:51

+0

爲了澄清,您將日期作爲JS日期對象傳遞給服務器,而不是字符串? – James 2013-05-14 15:20:23

+0

服務器端的結束日期應該是在19日星期日23:59:59而不是18日星期六結束。 – user1883004 2013-05-14 15:21:00

回答

0

它可以具有與使用ISO8601moment.js做(在Z上的字符串的末尾指示UTC),然後通過ToLocalTime()去。

0

這看起來像是一個時區問題。我不確定您使用的是哪種語言環境,但看起來好像您沒有考慮DST。確保您從客戶端&發送的UTC日期不是客戶端時區本地的UTC日期。

望着文檔moment.js

默認情況下,時刻解析並於當地時間

顯示器,因爲它有效地只是圍繞Date對象JS,一個包裝它默認:

根據當地時間爲今天的日期和時間創建一個JavaScript Date對象

因此,您需要通知moment.js將您創建的日期轉換爲UTC,使用utc parsing(例如,

moment.utc(moment().day(1).hour(0).minute(0).second(0).toDate());