没有时区信息的Javascript ASP.net日期格式 - 时区偏移量

时间:2010-07-06 08:26:22

标签: asp.net javascript datetime timezone datetimeoffset

我有一个客户端JavaScript,可以用JavaScript生成日期(new Date(2007,5,1))。

我需要将此日期传递给后面的代码可以访问的隐藏字段。

我的问题是当隐藏字段转换为DotNet日期时间时,时间不正确。这是因为JavaScript包含来自客户端浏览器的时区信息。

然后,DotNet使用此信息根据服务器时间和客户端时间之间的差异重新计算时间。

JavaScript需要的只是年,月和日。

我不想将3个int值传递给我的代码,因为这将是对整个应用程序的重大改变。

对我来说,最好的方法是什么?

如果我可以设置没有时区信息的UTC时间,我认为这可能有用。

感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

demo

如果我理解正确的话,

您需要.toDateString()

var date = new Date(2007,5,1);

document.write(date);
document.write("<br><br>versus<br><br>");
document.write(date.toDateString());

打印

Fri Jun 01 2007 00:00:00 GMT+0800 (Taipei Standard Time)

versus

Fri Jun 01 2007

答案 1 :(得分:1)

您可以使用DateTimeOffset.ParseExact使用您指定的格式将字符串解析为DateTimeOffset值:

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00";
        DateTimeOffset date = DateTimeOffset.ParseExact(dateString, "ddd MMM dd yyyy hh:mm:ss 'GMT'zzz", CultureInfo.InvariantCulture);

您必须将GMT放在引号中,否则M将被解释为格式字符。

不幸的是,不可能忽略部分字符串值。如果您的字符串包含时区的名称,则必须先将其拆分并获取没有描述的部分

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00 (Taipei Standard Time)";
        var parts=dateString.Split('(');
        string datePart = parts[0].TrimEnd();
        var date=DateTimeOffset.ParseExact(datePart,"ddd MMM dd yyyy hh:mm:ss 'GMT'zzz",CultureInfo.InvariantCulture);

答案 2 :(得分:0)

您可以根据自己创建的javascript Date对象建立一个字符串 - 它可以使用getDate()getMonth()getFullYear()方法构建你想要的隐藏字段中的确切字符串。

答案 3 :(得分:0)

当你在代码隐藏文件中获取值时,我建议在C#中使用格式规范。让我解释一下我的意思 - JavaScript中日期(...)的日期时间格式如下

Tue Jun 1 11:12:15 UTC + 0530 2010

在C#中将转换为以下格式字符串 - “ddd MMM d hh:mm:ss UTCzzz yyyy

使用此格式字符串使用DateTime.ParseExact(string <Hidden Field Value>, format, provider)在C#中获取日期时间的正确值。

将提供者用作System.Globalization.CultureInfo.InvariantCulture