我正在尝试从datetimepicker tetxbox中获取值,并将这些值与当前时间进行比较。
//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对象然后进行比较来比较日期时间应该是什么逻辑。
答案 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);
答案 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+)/);