在Javascript中验证日期时间

时间:2015-05-07 14:36:21

标签: javascript asp.net vb.net

我需要一些帮助,根据浏览器的语言验证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

2 个答案:

答案 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:ssdd/mm/yyyy hh:mm:ss

符合以下格式

更新了演示版:https://jsfiddle.net/kzzn6ac5/1https://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对象非常糟糕。