日期比较javascript

时间:2014-12-24 04:37:13

标签: javascript date

我在比较javascript中的日期时遇到了一些问题。

我的日期为“2014年12月1日”& “2014年11月19日”格式。

我比较日期,如

var stDate='19-Nov-2014';
var endDate='1-Dec-2014';
if(stDate < endDate){
    console.log('Hi');
}else{
console.log('Bye');
}

在外面它显示我“再见”,但它应该是“嗨”

我观察到这种比较比较了各个日期的日期(初始参数)。

我是javascript的新手。我没有办法解决这个问题。

请帮帮我。

5 个答案:

答案 0 :(得分:1)

目前您只比较两个字符串。您应该比较这样的日期:

new Date(stDate) < new Date(endDate)

var stDate='19-Nov-2014';
var endDate='1-Dec-2014';
if(new Date(stDate) < new Date(endDate)){
      console.log('Hi');
}else{
      console.log('Bye');
}

答案 1 :(得分:0)

就像@Arun P Johnny所说,你正在比较Strings而不是实际日期。在比较它们之前,您需要将日期转换为Date对象。检查this

答案 2 :(得分:0)

function ValidateDate() {
        var SDate = document.getElementById('<%=sdate.ClientID%>').value;
        var EDate = document.getElementById('<%=edate.ClientID%>').value;

        var sdate = new Date(stDate);

        var Edate = new Date(endDate);



        var alertReason1 = 'To Date must be greater than or equal to  From Date.'


        //var endDate = new Date(EDate);
        //var startDate = new Date(SDate);

        if (SDate != "" && EDate != "" && Edate > sdate ) {
            alert(alertReason1);

            return false;
        }

    }

答案 3 :(得分:0)

如其他答案所述,您需要将字符串转换为Date对象。最好的方法是使用如下函数解析字符串:

/* Return a Date object or NaN given a string in d, MMM y or dd-MMM-yyyy format
** e.g. 5 Dec, 2014
** Avoid conversion of two digit dates to 20th century
** Returns NaN if string is not a valid date
*/
function parseDMMMY(s) {
  var b = s.match(/\w+/g);
  var months = {jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
                jul:6, aug:7, sep:8, oct:9, nov:10, dec:11};
  if (b) {
    var d = new Date();
    d.setHours(0,0,0,0);
    d.setFullYear(b[2], months[b[1].toLowerCase()], b[0]);
  }
  return b && d.getFullYear() == b[2] && d.getDate() == b[0]? d : NaN;
}

如果将值直接传递给Date构造函数而不是使用 set * 方法,这也会像第19年那样处理1-1-19之类的日期,而不是1919年。

现在你可以做到:

var stDate  = parseDMMMY('19-Nov-2014');
var endDate = parseDMMMY('1-Dec-2014');

答案 4 :(得分:0)

要正确处理日期,我会引用Pavel Hodek


您可以做的最好的事情是使用ISO格式:YYYY-MM-DD或YYYY-MM-DDTHH:MM:SS

例如: 新日期('2011-04-11')

新日期('2011-04-11T11:51:00')

更多信息:MDN | Date

编辑:

对于旧的Internet Explorer兼容性(小于9的IE版本在Date构造函数中不支持ISO格式),您应该将日期时间字符串表示形式拆分为它的部分,然后您可以使用构造函数使用日期时间部分,例如:new Date('2011 ','04' - 1,'11','11','51','00')

请注意,月份数必须少1个。

重要提示:

“ISO格式”解决方案无法100%工作。字符串有时被解析为UTC,有时也被解析为本地时间(基于浏览器供应商和版本)。调用toString会返回当地时间,因此在某些情况下,根据用户的时区,新的日期('2011-04-11')将为您提供2011-04-10。

Chrome的行为与Internet Explorer 9相同,Firefox的行为与Internet Explorer 10 +相同。

安全解决方案是使用 Z 传递字符串值以将其解析为UTC值,例如新日期('2011-04-11T10:20:30Z')。最佳做法应始终是将日期存储为UTC并进行UTC计算。仅用于演示,它们应以当地时间形式呈现。


一旦你有两个日期(在解析和/或使用构造函数之后),你可以安全地比较它们。