【问题标题】:Convert string to datetime in javascript and compare with current time在javascript中将字符串转换为日期时间并与当前时间进行比较
【发布时间】:2014-12-19 10:59:38
【问题描述】:

我正在尝试从 datetimepicker tetxbox 中获取值并将这些值与当前时间进行比较。

JSFiddle

        //startTime textbox text = 19/12/2014 03:58 PM
        var startTime = Date.parse($('[id$=txtStartDate]').val().toString());

        //endTime textbox text = 19/12/2014 04:58 PM
        var endTime = Date.parse($('[id$=txtEndDate]').val().toString());

        var currentTime = Date.now();
        alert(startTime);
        alert(endTime);
        alert(currentTime);

        if (currentTime >= startTime && currentTime <= endTime) {
              alert();

        }

Date.parse() 自 1970 年 1 月 1 日以来用于将字符串转换为毫秒。 Date.now() 返回自 1970 年 1 月 1 日以来的当前日期毫秒数。

但是上述转换方法都不能正常工作。 通过首先将 19/12/2014 03:58 PM 格式的字符串转换为 Date 对象,然后进行比较来比较日期时间的逻辑应该是什么。

【问题讨论】:

  • 我已经编辑了 JsFiddle
  • 您好,请查看此链接jsfiddle.net/3mztdaja/2
  • 你正在使用一个日期选择器,你能把链接扔掉吗,因为我发现任何这样的插件都不太可能不包含解析器。

标签: javascript jquery string-to-datetime


【解决方案1】:

问题是Date() 需要日期格式 mm/dd/yyyy,所以您的日期无效。

您可以这样确定日期:

function toValidDate(datestring){
    return datestring.replace(/(\d{2})(\/)(\d{2})/, "$3$2$1");   
}

var startTime = Date.parse(toValidDate($('[id$=txtStartDate]').val().toString())); 
var endTime = Date.parse(toValidDate($('[id$=txtEndDate]').val().toString()));    
var currentTime = Date.now();

alert(startTime);
alert(endTime);
alert(currentTime);

演示:http://jsfiddle.net/3mztdaja/3/

【讨论】:

    【解决方案2】:

    由于格式为isn't documented as being supported by Date.parse,您最好自己解析它,这并不难:使用String#split 或带有捕获组的正则表达式将其拆分为各个部分,使用parseInt 进行转换将数字字符串的部分转换为数字(或者,使用这样的受控输入,只需在它们上使用一元 +),然后使用 new Date(...) 使用这些数字创建一个 Date 实例。

    一个问题:new Date 期望的 month 值是从零开始的,例如0 = 一月。如果输入使用 AM/PM 而不是 24 小时制,请记住在小时值上加上 12。


    当然,也可以使用多个日期/时间处理库中的任何一个,例如 MomentJS

    【讨论】:

      【解决方案3】:

      你应该使用这个方法

      var startTime  = new Date(year, month, day, hours, minutes, seconds, milliseconds);
      

      这是一个演示 http://jsfiddle.net/hswp7x8k/

      要从字符串中提取值,您可以使用此方法

      dd = '19/12/2014 03:58';
      dd.match(/(\d+)\/(\d+)\/(\d+)\s*(\d+):(\d+)/);
      

      这是一个演示 http://jsfiddle.net/w3wow1ay/2/

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 2017-05-04
        • 2018-07-22
        • 2021-11-17
        • 2022-09-27
        • 1970-01-01
        相关资源
        最近更新 更多