Javascript相当于.NET的DateTime.Parse

我正在尝试构建一个validation器,它将使用.NET的DefaultModelBinder,使用DateTime.Parse将字符串从表单发布转换为DateTime。 我不想等到日期已经发布到服务器,因为它意识到这是一个糟糕的约会。

目前,jquery.validate使用以下代码来validation日期字段:

// http://docs.jquery.com/Plugins/Validation/Methods/date date: function(value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } 

但是,由于Javascript糟糕的Date解析器,这个:

275481/69/100089

将评估为有效 ,至275760年9月12日。

而另一方面,这:

2013年11月19日

将评估为无效

当然,我知道C#的DateTime.Parse()会考虑文化(本地化)和闰年等问题,我可以接受假设固定(美国)文化,并允许“02-29-2013”​​在客户端并在服务器上启动它(理想情况下不是,但它是可以接受的)。

但我不敢相信有人没有把更好的日期validation器放在一起使用C#的DateTime.Parse()逻辑。

也许有人,我只是没有找到它 – 这就是我在这里张贴的原因。

而且我知道我有几种方法可以解决这个问题 – 从非常简单(不太准确)到极其复杂(更准确),但我希望有人已经走下这条路并找到了最佳点。

Datejs对我来说似乎非常强大。 它的解析function支持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框架支持许多不同的语言环境,其背后是Windows。

您没有尝试找到具有类似validation和解析的两个Datetime实现(一个用于JS,另一个用于C#),而是考虑让客户端1)使用自己的库来validation日期,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");