我有一个客户端JavaScript,可以用JavaScript生成日期(new Date(2007,5,1)
)。
我需要将此日期传递给后面的代码可以访问的隐藏字段。
我的问题是当隐藏字段转换为DotNet日期时间时,时间不正确。这是因为JavaScript包含来自客户端浏览器的时区信息。
然后,DotNet使用此信息根据服务器时间和客户端时间之间的差异重新计算时间。JavaScript需要的只是年,月和日。
我不想将3个int值传递给我的代码,因为这将是对整个应用程序的重大改变。
对我来说,最好的方法是什么?
如果我可以设置没有时区信息的UTC时间,我认为这可能有用。
感谢任何帮助。
答案 0 :(得分:1)
如果我理解正确的话,
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
。