2013-05-14 26 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());