如何在jquery中比较格式为dd / mm / yyyy hh:mm:ss的两个日期

时间:2013-12-28 07:31:49

标签: javascript jquery

我有两个日期格式为dd / mm / yyyy hh:mm:ss。当我使用<或者>比较,我得到错误的结果。我尝试了新的日期('dd / mm / yyyy hh:mm:ss')并比较它们仍然得到错误的结果。

任何人都可以帮忙,提前致谢。

2 个答案:

答案 0 :(得分:3)

最简单的方法是将它们转换为Date个对象。但是,由于您使用的是dd / mm / yyyy格式的日期,因此无法正常工作。 (默认情况下,Date使用ISO 8601格式 - yyyy-mm-dd。因此您需要将格式转换为javascript可以理解的格式。

// convert to a parseable date string:
var dateStrA = "28/12/2013 16:20:22".replace( /(\d{2})\/(\d{2})\/(\d{4})/, "$2/$1/$3");
var dateStrB = "28/12/2013 16:20:11".replace( /(\d{2})\/(\d{2})\/(\d{4})/, "$2/$1/$3");

// now you can compare them using:
new Date(dateStrA) > new Date(dateStrB);

有点乱,但有诀窍。

请注意,使用等号进行比较(例如===)对Date个对象不起作用。您还可以使用Date.compare()或转换为数字或在日期

上调用.getDate()

答案 1 :(得分:1)

“dd / mm / yyyy”是日期字符串解析中的错误格式,请将其修改为'mm / dd / yyyy',需要放置月份在一天之前,你可以直接比较它,例如:

a_time = new Date('30/12/2013 12:12:12');
//Mon Dec 30 2013 12:12:12 GMT+0800 (CST)

b_time = new Date('30/12/2013 12:12:13');
//Mon Dec 30 2013 12:12:13 GMT+0800 (CST)

a_time > b_time
//false

b_time > a_time
//true

如果您坚持使用格式“dd / mm / yyyy”

您可以使用moment.js来解析日期对象的任何特定格式:

a = moment('30/12/2013 01:02:03', 'DD/MM/YYYY HH:mm:ss')
b = moment('30/12/2013 01:02:04', 'DD/MM/YYYY HH:mm:ss')

a > b
//false
a < b
//true

如果您希望按原始JavaScript对象进行比较,只需使用toDate()方法获取Date()对象:

a = moment('30/12/2013 01:02:03', 'DD/MM/YYYY HH:mm:ss').toDate()
//Sat Mar 02 2013 01:00:00 GMT+0800 (CST)
b = moment('30/12/2013 01:02:04', 'DD/MM/YYYY HH:mm:ss').toDate()
//Sat Mar 02 2013 01:00:00 GMT+0800 (CST)
a > b
//false
a < b
//true