1

我正在尝试从 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 对象然后进行比较)来比较日期时间的逻辑应该是什么。

4

3 回答 3

3

问题是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/

于 2014-12-19T11:13:53.863 回答
2

由于该格式未记录为受支持Date.parse,因此最好的办法是自己解析它,这并不难:使用String#split或带有捕获组的正则表达式将其拆分为各个部分,用于parseInt转换部分将数字字符串转换为数字(或者,使用像这样的受控输入,只需+对它们使用一元),然后new Date(...)使用这些数字来创建Date实例。

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


或者,当然,使用几个日期/时间处理库中的任何一个,例如MomentJS

于 2014-12-19T11:04:51.773 回答
1

你应该使用这个方法

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/

于 2014-12-19T11:06:38.303 回答