【问题标题】:Validate Time Range using jQuery使用 jQuery 验证时间范围
【发布时间】:2017-05-23 05:17:08
【问题描述】:

我的页面有 2 个文本字段(开始时间和结束时间)我正在使用 HTML5 时间元素,现在我想验证开始时间总是小于结束时间,我目前正在使用下面的脚本来验证

function checkTimings(source, argument) {
                    var sTime = new Date("01/01/0001 " + $("[id$=txtStartTimings]").val());
                    var eTime = new Date("01/01/0001 " + $("[id$=txtEndTimings]").val());
                    argument.IsValid = sTime < eTime;
                }

当两个时间都是上午或下午,但有一种情况是开始时间是下午,结束时间是上午,比如 11.45 PM 到 12.15 AM,这里验证失败。

谁能建议我们如何处理这种情况?

【问题讨论】:

  • 您应该在时间戳的帮助下验证日期和时间,而不检查 am|pm
  • 将时间格式转换为 24 小时并验证

标签: javascript jquery validation datetime-comparison


【解决方案1】:

在进行计算之前是否可以将它们转换为 24 小时格式?

function checkTimings(source, argument) {
                var sTime = new Date("01/01/0001 " + $("[id$=txtStartTimings]").GetHours());
                var eTime = new Date("01/01/0001 " + $("[id$=txtEndTimings]").GetHours());
                argument.IsValid = sTime < eTime;
            }

【讨论】:

  • 即使转换为 24 小时也无济于事,因为 11:45 PM 将转换为 23:45 和 12:00 AM 转换为 00.00 现在这里再次开始时间大于结束时间。
  • 怎么样,你检查一下它是否在你认为是前一天的时间范围内,如果它在这个范围内,就给当天加1?
  • 但是这里我不是处理日期,而是时间,所以用户只需设置时间,它可以是任何一天,这里不关心天。
  • 是的,但是这种情况不是没有区分12AM属于当天还是第二天造成的吗?如果您有一个视图告诉用户上午 12 点所属的日期或在您的 24 小时前加上前缀,例如在上午 12:00 到凌晨 1:00 的范围内,新日期(“02/01/0001 " + $("[id$=txtEndTimings]") 所以你把 12:00AM 算作第二天,所以在你的计算中,sTime 将小于 eTime
  • 或者如果 sTime = PM 并且 eTime = AM,var eTime = new Date("02/01/0001 " + $("[id$=txtEndTimings]").val());
【解决方案2】:

您可以直接在数据构造函数中传递日期以获取实际日期。

function checkTimings(source, argument) {
                    var sTime = new Date($("[id$=txtStartTimings]").val());
                    var eTime = new Date($("[id$=txtEndTimings]").val());
                    argument.IsValid = sTime < eTime;
            }

如果问题仍然存在,那么只需在文本字段中更改日期的格式,或者您也可以在 js 函数中解析日期。

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多