2013-05-01 63 views
2

我有一個自定義屬性的DateTime驗證與給定的dateformat和javascript驗證器,它們都提供了我的客戶端和服務器端驗證。但現在我應該改變我的日期時間驗證,以便它將根據客戶端本地日期時間格式執行,我不知道如何。asp.net mvc datetime客戶端動態驗證日期格式

我找不到任何幫助我的東西。

所以,請告訴我如何實現至少客戶端日期時間驗證或如何通過JavaScript獲取客戶端的日期格式。

回答

1

如果您可以確定用戶的語言環境,則可以使用.Net全球化類來協助服務器端解析日期時間字符串。例如:

// Parsed as January 4th 
var dt1 = DateTime.Parse("1/4/2013", new CultureInfo("en-US")); 

// Parsed as April 1st 
var dt2 = DateTime.Parse("1/4/2013", new CultureInfo("en-GB")); 

但是最好的辦法是完全避免這種情況。在您的JavaScript代碼中,將值返回爲ISO8601字符串 - 這是文化不變的。本機瀏覽器對此的支持各不相同內置函數在IE9 +中工作。

// This returns an ISO formatted date, in UTC. 
var s = yourDate.ToISOString(); 

一種方式來獲得完整的瀏覽器的支持,並得到一個ISO日期無須轉換爲UTC,是使用moment.js圖書館,ISO8601是默認格式:

// This returns an ISO formatted date, with the user's local offset. 
var s = moment(yourDate).format(); 

// This returns an ISO formatted date, in UTC. 
var s = moment(yourDate).utc().format(); 

當你把這些值給服務器,你可以在你的.Net代碼中解析它們,而不用考慮文化。格式已經是文化不變的。爲了防止服務器的時區的干擾,你應該分析它們作爲DateTimeOffset

// assuming this is an ISO value you got from the client: 
var s = "2013-04-20T09:00:00-07:00"; 

// simply parse it 
var dto = DateTimeOffset.Parse(s); 

// if you don't care about the offset at this point: 
var dt = dto.DateTime; 

當然,如果你想優雅地失敗,你可以這樣做,而不是:

DateTimeOffset dto; 
var isValid = DateTimeOffset.TryParse(s, out dto); 
+0

非常感謝你爲你的答案,但實際上我的問題是驗證用戶的日期輸入,以便它的文化的日期時間格式正確格式,否則不允許發佈它。 – Gohar 2013-05-01 19:17:04

+0

@Gohar - 你需要知道他們的文化背景,然後你可以使用'DateTime.TryParse'。關於檢測用戶的文化信息,還有其他一些問題。 – 2013-05-01 19:29:14