在javascript中将字符串转换为datetime并与当前时间进行比较

时间:2014-12-19 10:59:38

标签: javascript jquery string-to-datetime

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

3 个答案:

答案 0 :(得分:2)

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

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


或者,当然,使用多个日期/时间处理库中的任何一个,例如new Date(...)

答案 1 :(得分:2)

问题是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);

DEMO:http://jsfiddle.net/3mztdaja/3/

答案 2 :(得分:1)

您应该使用此方法

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

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

从字符串的extrat值可以使用此方法

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

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