【问题标题】:comparing a date string with current Date()将日期字符串与当前 Date() 进行比较
【发布时间】:2019-04-20 18:48:17
【问题描述】:

所以,我已经有一个变量来保存某一列中的所有单元格。 每个单元格都包含一个时间戳,因为它是 innerText,格式如下,yyyy-mm-dd hh:mm 24 小时格式。

如何将我拥有的字符串与 Date() 进行比较以查看该字符串是否在下一小时内?

我在想一个 for 循环遍历数组,里面有一个 if 函数说“如果显示的时间在当前时间的一小时内,则将单元格的背景颜色更改为红色。

for(var i=0; i<column.length;i++){
  if(column[i].innerText - Date() < 1hr){   //this line needs work
    column[i].style.backgroundColor='#ff000';
  } else(){
    }
};

我确定可能需要使用一些解析方法或其他东西,但我不太熟悉。

注意:我正在使用 Tampermonkey 将代码注入到我无法控制的页面中,因此时间戳即将到来。

【问题讨论】:

    标签: javascript date string-comparison tampermonkey


    【解决方案1】:

    日期构造函数为您完成解析工作。所以你只需要这样的东西:

    hour = 3600000 //1 hour in ms
    nextHour = new Date(column[i].innerText) - new Date()
    if(nextHour <= hour && nextHour >= 0) {
        //Your code here
    }
    

    解释:

    由于 Javascript 日期基于自 1970 年 1 月 1 日午夜以来的毫秒数,-(减号)运算符允许您将其视为数字并将结果数字作为数字返回。

    【讨论】:

    • 还有办法比较 DAY,因为如果列中的日期在当前日期之后,我看不出使用 .getHours() 会有什么帮助。
    • 你是对的。然而,第二种情况应该完全涵盖这一点,因为它测量两个日期之间的时间差。
    • @Pshock13 我现在已经删除了第一个解决方案,因为它在很多方面都有问题。当前的解决方案应该可以正常工作。
    • 在声明变量之前需要var,而且,我尝试创建一个新的var test = new Date(column[i].innerText)。在我的 for 循环中执行 console.log(test) 会为每个循环返回无效日期。
    • @Pshock13 如果您的日期采用您所说的格式,则不应该发生这种情况。在问题中发布 actual 日期字符串可能会有所帮助。
    【解决方案2】:

    改变这个:

    if(column[i].innerText - Date() < 1hr){
    

    到这里:

    var hourNow = new Date().getHours();
    var hourColumn = Number(column[].innerText.split("")[11] + "" + column[].innerText.split("")[12]);
    if (hourNow + 1 >= hourColumn || hourColumn + 1 <= hourNow) {
    

    它应该可以工作。

    【讨论】:

    • 第一个:我希望您在拆分时指的是 column[i] 而不仅仅是 column[]。第二:如果列中的日期与当前日期不同,这将无法正常工作。即列:第 4 列,而当前日期:第 3 列。
    【解决方案3】:

    您可以采用以下方法。这里我使用了getUTCHours(),因为new Date(new Date(columns[i].innerText) - new Date()) 会给出UTC 时间戳。你可以从here找到关于UTC时间戳的解释

    var columns;
    
    function changecolors() {
      columns = document.getElementsByClassName('column');
      for (var i = 0; i < columns.length; i++) {
        if (new Date(new Date(columns[i].innerText) - new Date()).getUTCHours() < 1) {
          columns[i].style.backgroundColor = '#ff0000';
        }
      };
    }
    <div class="column">2018-11-18 09:30</div>
    <div class="column">2018-11-18 11:00</div>
    
    <button onclick="changecolors()">Change Colors</button>

    【讨论】:

    • "yyyy-mm-dd hh:mm" 不是 ECMAScript 支持的格式,因此解析取决于实现。至少一个当前浏览器会返回一个无效的日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多