2010-07-06 86 views
2

我有一个客户端JavaScript在JavaScript中生成日期(new Date(2007,5,1))。Javascript ASP.net日期格式不带时区信息 - 时区偏移

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

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

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

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

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

对我来说,完成这个的最佳方式是什么?

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

任何帮助表示赞赏。

回答

0

您可以从您所创建的JavaScript对象Date建立一个字符串 - 它有getDate()getMonth()getFullYear()方法,您可以用它来建立你的隐藏字段要完全匹配的字符串。

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 
0

我建议,当你使用一个格式规范的C#代码后面的值。让我解释一下我的意思是 - 在JavaScript中的日期(...)的日期时间格式如下

周二6月1日十一时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

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