3

我正在发送 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); }
    }
}
4

2 回答 2

0

这看起来像一个时区问题。我不确定您在哪个区域设置,但似乎您没有考虑 DST。确保您从客户端发送 UTC 日期,而不是客户端时区本地的日期。

查看moment.js的文档

默认情况下,moment 解析并显示为本地时间

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

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

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

moment.utc(moment().day(1).hour(0).minute(0).second(0).toDate());
于 2013-05-14T15:25:59.163 回答
0

它可能与moment.jsusing ISO8601(字符串末尾的 Z 表示 UTC)然后通过ToLocalTime().

于 2013-05-14T15:24:58.643 回答