我有一个自定义属性,用于使用给定的日期格式进行日期时间验证,还有 javascript 验证器,它们为我提供客户端和服务器端验证。但现在我应该更改我的日期时间验证,以便根据客户端本地日期时间格式执行它,但我不知道该怎么做。
我找不到任何对我有帮助的东西。
所以请告诉我如何至少实现客户端 DateTime 验证或如何通过 javascript 获取客户端的日期格式。
最佳答案
如果您可以确定用户的区域设置,则可以使用 .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 字符串取回——这是文化不变的。 native 浏览器对此的支持各不相同。内置函数适用于 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);
关于javascript - asp.net mvc datetime 通过客户端日期格式进行动态验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16321010/