2013-05-01 73 views
2

我有一个自定义属性的DateTime验证与给定的dateformat和javascript验证器,它们都提供了我的客户端和服务器端验证。但现在我应该改变我的日期时间验证,以便它将根据客户端本地日期时间格式执行,我不知道如何。asp.net mvc datetime客户端动态验证日期格式

我找不到任何帮助我的东西。

所以,请告诉我如何实现至少客户端日期时间验证或如何通过JavaScript获取客户端的日期格式。

回答

1

如果您可以确定用户的语言环境,则可以使用.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字符串 - 这是文化不变的。本机浏览器对此的支持各不相同内置函数在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); 
+0

非常感谢你为你的答案,但实际上我的问题是验证用户的日期输入,以便它的文化的日期时间格式正确格式,否则不允许发布它。 – Gohar 2013-05-01 19:17:04

+0

@Gohar - 你需要知道他们的文化背景,然后你可以使用'DateTime.TryParse'。关于检测用户的文化信息,还有其他一些问题。 – 2013-05-01 19:29:14