我试图建立一个验证器,将使用DateTime.Parse为一个字符串从形式张贴到日期时间转换的.NET的DefaultModelBinder工作。 我不希望要等到日期已经被发布到服务器为它意识到这是一个错误的日期。
目前jquery.validate使用下面的代码来验证日期字段:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
然而,由于JavaScript的可怕的日期解析器,这样的:
275481/69/100089
将评估为有效 ,到9月12日,275760。
而在另一方面,这样的:
2013年11月19日
将评估为无效 。
当然,据我所知,C#的DateTime.Parse()在客户端上需要的东西就像文化(本地化)和闰年进去了,我可以假设一个固定的(美国)的文化,让‘2013年2月29日’生活并且踢出在服务器(不理想,但它是可以接受的)。
但我不认为有人不把一个美好的约会验证与C#的DateTime.Parse()的逻辑工作。
也许有人,我只是还没有找到它 - 这就是为什么我在这里发帖。
我知道我有几种方法去这个问题 - 从非常简单(不准确),以极其复杂的(更准确),但我希望有人已经走了这条路,找到了最佳平衡点。
Datejs似乎相当强劲给我。 其解析功能支持超过150个培养物:
Date.parse("February 20th 1973")
而如果你需要解析日期字符串,是不是在目前的文化,你可以使用有效parseExact功能:
// The Date of 15-Oct-2004
Date.parseExact("10/15/2004", ["M/d/yyyy", "MMMM d, yyyy"]);
坦率地说,最好的办法是进行一个AJAX命中,并要求你的ASP.net web服务器来解析字符串并返回一个Javascript日期。
JavaScript库很容易混淆不同的语言环境,例如:
GET /ParseDate.ashx?dateStaring=06/01/34 4:53:05 غ.و&locale=ar-SA
这变得非常复杂,因为:
"6/1/34" = November 19, 2012
.NET Framework中,与Windows背后,有很多不同的语言环境的支持。
而不是试图找到两个日期时间实现(一个为JS,另一个用于C#)具有相似的验证和分析,你有没有考虑让客户端1)使用自己的库来验证日期和2)分析并重新格式化日期到C#友好的格式?
这将允许您使用DateJS获得日期输入一个非常灵活的前端,使之更容易处理客户端的文化,并让您的服务器端处理固定格式。
您是否尝试过通过你的字符串到构造?
下面是一个示例从https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
var birthday = new Date("December 17, 1995 03:24:00");