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");