繁体   English   中英

与 Javascript Date getTime() 函数的行为不一致

[英]Inconsistent behaviour with Javascript Date getTime() function

我正在尝试根据时间戳的小时数进行过滤(在此示例中,过滤时间为上午 8 点之后的所有时间):

    var beginningTimeValue = new Date('2020-01-01 08:00:00');
    var unique = [["value","value","value","value","12/01/2021 00:03:35","value"],["value","value","value","value","01/01/2020 00:03:35","value"], ["value","value","value","value","01/01/2020 08:03:35","value"], ["value","value","value","value","01/01/2020 13:03:35","value"]]
      
    if(!beginningTimeValue == ""){
      unique = unique.filter(function(row)
                             {
        var rYear = row[4].substring(6, 10);
        var rMonth = row[4].substring(3, 5);
        var rDay = row[4].substring(0, 2);
        var rHour = row[4].substring(11, 13);
        var rMinute = row[4].substring(14, 16);
        var rSecond = row[4].substring(17, 19);
        var bTime = new Date(parseInt(rYear, 10), parseInt(rMonth, 10), parseInt(rDay, 10), parseInt(rHour, 10), parseInt(rMinute, 10), parseInt(rSecond, 10));
        console.log("ODATE = " + rYear + "/" + rMonth + "/" + rDay + "_" + rHour + ":" + rMinute + ":" + rSecond);
        console.log("BDATE = " + bTime.getFullYear() + "/" + bTime.getMonth() + "/" + bTime.getDate() + "_" + bTime.getHours() + ":" + bTime.getMinutes() + ":" + bTime.getSeconds());
        beginningTimeValue.setYear(bTime.getYear());
        beginningTimeValue.setMonth(bTime.getMonth());
        beginningTimeValue.setDate(bTime.getDate());
        if(bTime.getTime() >= beginningTimeValue.getTime()){
            console.log(bTime.getTime()*24*3600*1000 + " VS " + beginningTimeValue.getTime()*24*3600*1000);
        }
        else{
          console.log("FALSE");
        }
        return bTime.getTime() >= beginningTimeValue.getTime();
      }
                            );
    }
    console.log(unique);

我已经调试了我的方法来发现我不会在 2nd IF中获得FALSE值,但是我不知道为什么.getTime()函数为我的控制台日志返回了截然不同的值:

“136556220816000000000 VS -5.0438323821312e+21”

“136560264336000000000 VS -5.0438323821312e+21”

问题出在以下行:

beginningTimeValue.setYear(bTime.getYear());

(已弃用) getYear()函数返回

[a] 表示给定日期年份的数字,根据当地时间减去 1900。

(也已弃用) setYear()函数

[...] 将任何两位数解释为1900的偏移量

在您的情况下, getYear()返回一个类似121的值,它不是两位数。 当您随后使用该值调用setYear()时,您会得到一个设置为 121 年而不是 2021 年的日期。

由于getTime()返回自 1970 年以来的毫秒数,而 121 是在 1970 年之前,因此您得到一个负数。


TL;DR:使用getFullYear()setFullYear()而不是getYear()setYear()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM