我需要一些帮助,根据浏览器的语言验证Javascript中的日期时间字符串。
我可以很容易地获得日期时间格式,例如,如果语言设置为pt-BR格式为
dd/MM/yyyy HH:mm:ss
我尝试过这样的事情:
var dateFormat = "dd/MM/yyyy HH:mm:ss";
var x = Date.parseExact($("#theDate").val(), dateFormat);
然而x总是空的。我在想因为Date.parseExact无法做到。我需要能够为所有浏览器语言执行此操作,我宁愿不使用其他库。使用正则表达式也是因为我需要编写这么多不同的表达式。
有没有人有任何建议可以帮助我走上正轨?我也不反对使用网络方法。
我尝试使用以下webmethod,它与en-US一起使用,但没有别的:
Public Function ValidateDates(ByVal strDate_In As String) As String
Dim theFormat As String = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern() + " " + CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern()
Try
Dim d As DateTime = DateTime.ParseExact(strDate_In, theFormat, CultureInfo.CurrentCulture)
Return "true"
Catch ex As Exception
Return "false"
End Try
End Function
答案 0 :(得分:1)
您可以使用Regex执行此操作:
var dateFormat = "dd/MM/yyyy HH:mm:ss";
var x = $("#theDate").val().match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/);
console.log(x);
演示:https://jsfiddle.net/kzzn6ac5/
<强>更新强> 以下正则表达式可以帮助您并根据您的需要进行改进:
^((\d{2}|\d{4})[\/|\.|-](\d{2})[\/|\.|-](\d{4}|\d{2}) (\d{2}):(\d{2}):(\d{2}))$
它与/.-
和yyyy/mm/dd hh:mm:ss
或dd/mm/yyyy hh:mm:ss
更新了演示版:https://jsfiddle.net/kzzn6ac5/1或https://regex101.com/r/aT1oL6/1
可以找到与日期匹配相关的其他正则表达式here。
答案 1 :(得分:1)
JavaScript日期对象看似简单易行,我在一个项目中与他们合作,他们有一个偷偷摸摸的学习曲线需要花费大量时间来掌握(而不是JavaScript的其他部分,这是相对孩子的...玩)。我建议让VB,或者其他任何东西来处理它。
但是如果你想要一个在javascript中运行的方法,没有正则表达式(如你的问题中所述),你可以像这样对它执行字符串操作:
try {
var user_input = $("#theDate").val();
var split = user_input.split(" "); // 0: date, 1: time
var split_time = split[1].split(":"); // 0: hours, 1: minutes, 2: seconds
d.setHours(split_time[0]);
d.setMinutes(split_time[1]);
} catch {
// not in a valid format
}
此解决方案假设输入格式正确,如果发生错误,则不是。这不是最好的做事方式,但JS Date对象非常糟糕。