2010-07-06 87 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);