Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中验证日期时间_Javascript_Asp.net_Vb.net - Fatal编程技术网

在Javascript中验证日期时间

在Javascript中验证日期时间,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我需要一些基于浏览器语言验证Javascript中日期时间字符串的帮助 我可以很容易地获得datetime格式,例如,如果将语言设置为pt BR,格式将是 dd/MM/yyyy HH:mm:ss 我试着用这样的方法: var dateFormat = "dd/MM/yyyy HH:mm:ss"; var x = Date.parseExact($("#theDate").val(), dateFormat); try { var user_input = $("#theDate").

我需要一些基于浏览器语言验证Javascript中日期时间字符串的帮助

我可以很容易地获得datetime格式,例如,如果将语言设置为pt BR,格式将是

dd/MM/yyyy HH:mm:ss
我试着用这样的方法:

var dateFormat = "dd/MM/yyyy HH:mm:ss";
var x = Date.parseExact($("#theDate").val(), dateFormat);
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
}
但是x总是空的。我在想,因为Date.parseExact无法执行时间。我需要能够为所有浏览器语言做到这一点,我宁愿不使用其他库。使用正则表达式也是不可能的,因为我需要编写这么多不同的表达式

有人有什么建议可以帮助我走上正确的道路吗?我也不反对使用webmethod

我尝试过使用以下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

您可以使用正则表达式执行以下操作:

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);
演示:

更新 以下正则表达式可能会帮助您并根据您的需要进行改进:

^((\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

更新的演示:或


可以找到更多与日期匹配相关的正则表达式。

JavaScript日期对象看起来很简单,我在一个项目中与它们一起工作,它们有一个潜移默化的学习曲线,需要花费很多时间才能掌握(与JavaScript的其余部分相反,后者是相对儿童游戏)。我建议让VB或者其他任何东西来处理它

但是,如果您想在javascript中实现这一点,而不需要正则表达式(如您的问题中所述),您可以对其执行如下字符串操作:

var dateFormat = "dd/MM/yyyy HH:mm:ss";
var x = Date.parseExact($("#theDate").val(), dateFormat);
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日期对象非常可怕。

JavaScript通常不理解本地日期,因此您必须自己解析它。您是如何开始使用本地日期格式的?我使用的是全球化文化。这是一个asp.net web应用程序,我也可以通过vb.net cultureinfo获得它。我必须使用这个日期格式以正确的格式显示日期。我们使用DateTimePicker来选择日期,但是我们希望用户也能够输入日期,这就是问题所在。有些国家/地区为dd/mm/yyyy,有些国家/地区为dd.mm.yyyy,等等。部分问题还在于时间在同一输入框中。我甚至尝试过使用使用vb.net的DateTime.ParseExact的webmethod,但我似乎也无法做到这一点。因此,使用ajax将日期发送到服务器,并将其解析为时间戳。请参见我对我尝试的webmethod的编辑。OP说Regex对他的场景没有用处!是的,我更新了anwser,它同时匹配
dd-mm-yyyy
dd/mm/yyyy
。它已经过测试了!:)@NiteTrip如果要强制执行特定格式,可以使用正则表达式匹配常规日期格式,然后检查由不同捕获组(即“-”或“/”)匹配的捕获内容(假设“…不能将其设置为dd/mm/yyyy格式”。这意味着在某些上下文中不允许使用特定格式)因此,您需要检索日期格式,然后将其设置为:
newregexp(date)
@NiteTrip日期格式的数量非常有限。如果您查看我添加到这个答案中的链接,有许多现成的正则表达式可用于匹配大多数格式。如果这太难,只需为用户设置一种格式即可。鉴于mm-dd-yyyy和dd-mm-yyyy看起来是一样的,您仍然需要设置一些规则。