在 Javascript 中验证日期时间
Posted
技术标签:
【中文标题】在 Javascript 中验证日期时间【英文标题】:Validating Date Time In Javascript 【发布时间】:2015-07-18 05:05:20 【问题描述】:我需要一些帮助来根据浏览器的语言验证 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 始终为 Null。我在想,因为 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
【问题讨论】:
JavaScript 通常不理解本地日期,因此您必须以某种方式自己解析它。您如何获得本地日期格式的开头? 我正在使用全球化文化。这是一个 asp.net 网络应用程序,我也可以通过 vb.netcultureinfo 获得它。我也必须使用此日期格式以正确的格式显示日期。我们使用 datetimepickers 来选择日期,但是我们希望用户也能够输入日期,这就是问题所在。有些国家如 dd/mm/yyyy 有些是 dd.mm.yyyy 等。部分问题还在于时间在同一个输入框中。我什至尝试过使用使用 vb.net 的 DateTime.ParseExact 的网络方法,但我似乎也无法让它工作。 所以用ajax将日期发送到服务器并在那里解析成时间戳 查看我对我尝试的网络方法的编辑。 【参考方案1】:您可以使用正则表达式来执行此操作:
var dateFormat = "dd/MM/yyyy HH:mm:ss";
var x = $("#theDate").val().match(/^(\d2)\/(\d2)\/(\d4) (\d2):(\d2):(\d2)$/);
console.log(x);
演示:https://jsfiddle.net/kzzn6ac5/
更新 以下正则表达式可以帮助您并根据您的需要进行改进:
^((\d2|\d4)[\/|\.|-](\d2)[\/|\.|-](\d4|\d2) (\d2):(\d2):(\d2))$
它与/.-
和yyyy/mm/dd hh:mm:ss
或dd/mm/yyyy hh:mm:ss
匹配以下格式
更新的演示:https://jsfiddle.net/kzzn6ac5/1 或 https://regex101.com/r/aT1oL6/1
更多与日期匹配相关的正则表达式可以在here找到。
【讨论】:
OP 说 Regex 对他的场景没有用处! 是的,我更新了anwser,它匹配dd-mm-yyyy
和dd/mm/yyyy
。已经测试过了! :)
@NiteTrip 如果您想强制执行特定格式,您可以使用正则表达式匹配一般日期格式,然后检查不同捕获组匹配的捕获内容(即“-”或“/” ) (假设“...不应该以 dd/mm/yyyy 的格式放入它。”意味着您在某些情况下不允许某些格式)
所以您需要检索日期格式,然后将其设置为:new RegExp(date)
@NiteTrip 日期格式的数量非常有限。如果您查看我添加到此答案的链接,则有许多现成的正则表达式可用于匹配大多数格式。如果这太难了,只需设置一种格式供用户使用。鉴于 mm-dd-yyyy 和 dd-mm-yyyy 看起来一样,您无论如何都需要设置一些规则。【参考方案2】:
JavaScript 日期对象看似简单,我曾在一个项目中使用过它们,但它们的学习曲线很隐秘,需要花费大量时间才能掌握(与 JavaScript 的其余部分相反,这是相对幼稚的游戏)。我建议让 VB 或其他任何东西来处理它。
但是,如果您想在没有 Regex 的情况下在 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 对象非常可怕。
【讨论】:
以上是关于在 Javascript 中验证日期时间的主要内容,如果未能解决你的问题,请参考以下文章
开始日期结束日期验证 -Jquery/javascript - kendoUI