从JSON转换的日期不正确

时间:2013-05-14 15:17:06

标签: c# asp.net-mvc

我发送2个日期范围,代表当前周的开始和结束。但是,日期的转换并不是我在服务器端所期望的。开始日期很好,但结束日期是一天,我不明白为什么?

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); }
    }
}

2 个答案:

答案 0 :(得分:0)

可能与moment.js使用ISO8601(字符串末尾的Z表示UTC),然后经过ToLocalTime()

答案 1 :(得分:0)

这看起来像是时区问题。我不确定你所在的地区,但看起来好像你没有考虑夏令时。确保您从客户端发送UTC日期&不是客户时区本地的。

查看moment.js

的文档
  

默认情况下,时刻会以当地时间分析并显示

因为它实际上只是JS中Date对象的包装器,默认情况下:

  

根据当地时间为今天的日期和时间创建一个JavaScript Date对象

因此,您需要告诉moment.js使用utc parsing将您创建的日期转换为UTC,例如

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