2

new Date(2007,5,1)我有一个在 JavaScript( )中生成日期的客户端 JavaScript 。

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

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

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

我需要的 JavaScript 只是年、月和日。

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

我实现这一目标的最佳方法是什么?

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

任何帮助表示赞赏。

4

4 回答 4

1

演示

如果我理解正确的话,

你需要.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
于 2010-07-06T08:45:18.920 回答
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);
于 2010-07-06T10:03:50.903 回答
0

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

2010 年 6 月 1 日星期二 11:12:15 UTC+0530

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

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

使用提供者作为System.Globalization.CultureInfo.InvariantCulture.

于 2010-07-06T09:07:49.240 回答
0

您可以从您创建的 javascript 对象构建一个字符串Date- 它具有getDate()getMonth()以及getFullYear()您可以用来在隐藏字段中构建您想要的确切字符串的方法。

于 2010-07-06T08:30:12.030 回答