日期时间:JavaScript vs C#

4

尽管我已经阅读了许多帖子,但我的代码中仍然有魔力。 我在数据库中有一个DateTime值('2011-03-30 00:00:00.000'),我检索它用于asp.net/mvc页面,其中某些JavaScript需要读取它并进行比较。以下是其中的魔法:

<% 
DateTime unixTimeOffset = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime testDate = new DateTime(2011,03,30,0,0,0,0);
%>
<%= (testDate - unixTimeOffset).TotalMilliseconds %>
...

代码的最后一行给我这个值:1301443200000。当我试着在JavaScript中读取它时,我得到了:

val myDate = new Date(1301443200000);

我的日期是Tue Mar 29 2011 20:00:00 GMT-0400 (Eastern Daylight Time),应该是3月30号,但不是。

我知道它提供当地时间(GMT-4)的日期参考,但怎样才能使它独立?有什么想法吗?谢谢。

3个回答

6

对于与C#相关的日期:

您可能需要考虑使用DateTime.ToUniversalTime().UTCNow(),这将使您能够保持所有日期独立于时区。

 DateTime date = DateTime.UTCNow();

关于与Javascript相关的日期:

Javascript提供了一个UTC方法,可以获取世界标准时间。

//Declaration
var date = new Date(Date.UTC(YYYY,MM,DD));

//Use
var newDate = date.toUTCString();

希望这可以帮到您 :)

在Firebug中,new Date(Date.UTC(1301443200000))返回Invalid Date {}。这不是一个有效的参数。这是签名:Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]]) - Wayne
@lwburk - 显然是声明和使用混淆了 :) 谢谢! - Rion Williams
请注意,我认为JavaScript解决方案并没有太大帮助,因为真正需要的是“YYYY”,“MM”和“DD”,因此它们不作为输入可用,而是作为输出所需。 - Wayne

2

获取客户端的时区偏移量,并将其加到服务器的值上。就像这样:

var serverOffset = 1301443200000;
var localOffset = myDate.getTimezoneOffset() * 60 * 1000;
var myDate = new Date(serverOffset + localOffset);
console.log(myDate); // Wed Mar 30 2011 00:00:00

请注意,Tue Mar 29 2011 20:00:00 GMT-0400 (Eastern Daylight Time)是与您原始UTC日期相同的时间点。这种方法创建一个代表一个新时间点的新日期。然而,如果您只是想显示相同的日期值,那么这种方法就可以胜任。
或者,您可以使用Date的UTC方法将您的原始日期打印为UTC:
function pad(num) {
    return ("0" + num).slice(-2);
}

function formatDate(d) {
    return [d.getUTCFullYear(), 
            pad(d.getUTCMonth() + 1), 
            pad(d.getUTCDate())].join("-") + "T" + 
           [pad(d.getUTCHours()), 
            pad(d.getUTCMinutes()), 
            pad(d.getUTCSeconds())].join(":") + "Z";
}

formatDate(new Date(1301443200000));

输出:

"2011-03-30T00:00:00Z"

1

你的代码是正确的。由于Tue Mar 29 2011 20:00:00 GMT-0400Wed Mar 30 2011 00:00:00 GMT+0000代表同一时刻,因此myDate变量保存了正确的日期。我猜测你看到前者是因为这是你电脑所在的时区。使用myDate.toUTCString()将日期转换为UTC格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接