javascript - asp.net mvc datetime 通过客户端日期格式进行动态验证

标签 javascript asp.net-mvc datetime validation

我有一个自定义属性,用于使用给定的日期格式进行日期时间验证,还有 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/

相关文章:

javascript - ASP 启用回车键

javascript - 使用 javascript 确认时,Asp.net requiredfieldvalidator 停止工作

Javascript按给定的数组元素拆分字符串

javascript - 在模型、 View 和 JavaScript 中使用的数据列表的一个中心位置?

date - Go语言从Time中获取日、月、年

javascript - 如何取消 HTTP fetch() 请求?

javascript - Fetch API 调用导致新的 Asp.net session

c# - MVC 6 Controller 中的 ControllerContext 和 ViewEngines 属性在哪里?

PHP MySQL 更新数据库中的日期时间

r - 使用 scale_x_datetime 和 geom_col 移动 x 轴刻度,使条形不以刻度线为中心