【问题标题】:How can I use js (or moment.js) to check if a date is past the current date?如何使用 js(或 moment.js)检查日期是否超过当前日期?
【发布时间】:2019-03-03 16:15:50
【问题描述】:

所以现在我只是想从 para 类中获取日期以打印到控制台。 Jquery 和 moment 都运行良好。现在这不会向控制台记录任何内容。我需要查看当前日期是否在任何具有 para 类的日期之后 x 天。在这一点上,我很乐意将课程日期记录到控制台。

js

        const dates = $('.para');

        dates.each((i, elem) => {
         let parts = $(elem).text().split('/');
           let dt = new Date(parts[2] ,parts[1], parts[0]).getTime();
           let diff = Math.floor((dt - new Date().getTime()) / (86400 * 
         1000));
       console.log('date:', $(elem).text(), 'days diff vs today:', diff);
      });

html

    <!DOCTYPE html>
      <html lang="en" dir="ltr">
       <head>
     <meta charset="utf-8">
         <title></title>
     <script src="moment.js"></script>

       <script 
      src="https://cdnjs.cloudflare.com/
  ajax/libs/jquery/3.3.1/jquery.slim.min.js" integrity="sha256- 
   3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=" crossorigin="anonymous"> 
   </script>
   <script src="forrealz.js"></script>



        </head>
      <body>

     <p class="para">
    11/18/2021
      </p>
    <p class="para">
  09/12/1999
     </p>

  </body>
  </html>

更新:在代码笔而不是 chrome 中尝试了这个,它可以工作,但数学是错误的。 “日期:” ” 2018 年 9 月 18 日 ” “天与今天的差异:” 284 “日期:” ” 1999 年 9 月 12 日 " "天与今天的差异:" -6837

【问题讨论】:

  • 看看你的html代码也会很有帮助
  • i &lt; element.length; 看起来像是一个潜在的错字。你的意思是在那儿使用 $element 吗?
  • 但是,那里的循环并没有真正意义,因为元素一次只能是一个 p 元素
  • 另外,formatted 是一个字符串。我想formatted[i] 只会输出一个字符。
  • 为了测试我只有

    23/05/2021

    19/12/1999

标签: javascript jquery date momentjs


【解决方案1】:

Momentjs diff是这里的关键函数:

var dayDifference = 10;

var d = new Date();
var momentDate = moment(d);

$('p.para').each(function (index, element) {
    var date = moment($(this).text().trim(), 'M/D/YYYY');
    if (momentDate.diff(date, 'days') < dayDifference) {
        // display alert
    }
}

这可以应用于您提供的 html 示例:

<p class="para"> 23/05/2021 </p>
<p class="para"> 19/12/1999 </p> 

【讨论】:

  • 谢谢,但我似乎无法让警报或控制台日志正常工作
  • 尝试到循环内的console.log(momentDate.diff(date, 'days')) 看看它是否真的计算日差
【解决方案2】:

编辑:

下面从你的 html 中获取日期文本,解析成月、日、年,然后将其转换为 js 日期对象以与当前日期进行比较。日期差从毫秒转换为天输出。

const dates = $('.para');
dates.each((i, elem) => {
  const [m, d, y] = $(elem).text().split('/');
  const dt = new Date(y, m - 1, d);
  const diff = Math.floor((dt - new Date()) / (86400 * 1000));
  console.log('date:', $(elem).text(), 'days diff vs today:', diff);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="para">05/23/2021</p>
<p class="para">12/19/1999</p>

原始(在删除 moment.js 代码并将 html 添加到问题中的编辑之前):

您可以使用 vanilla js 通过解析 html 中的日期文本并转换为 js 日期对象来获取以天为单位的日期差异,这样您就可以进行一些数学运算以将毫秒数的差异转换为天数(在下面的例子)。

下面示例中的 dates 数组是您将从 html 中选择的日期元素集合的占位符(如果您正在使用 table 或 @987654325,请从您的问题/cmets 中不确定@ 元素)。工作 sn-p 来说明:

const dates = ['05/23/2021', '12/19/1999'];
for (const date of dates) {
  const [m, d, y] = date.split('/');
  const dt = new Date(y, m - 1, d);
  const diff = Math.floor((dt - new Date()) / (86400 * 1000));
  console.log('date:', date, 'days diff vs today:', diff);
}

【讨论】:

  • 这与我正在寻找的非常接近。我需要一个是当前时间,另一个是存储在 para 类中的所有数据的数组,而不是将日期直接写入 var。
  • 啊,我看错了。所以我只需要数组中的日期来自 para 类。
  • @emilyk 是正确的。您可以执行document.querySelectorAll('.para') 之类的操作来获取集合中的所有日期,然后访问循环中每个日期的textContent 属性以拆分为日期部分等。将在答案中添加一个示例以明确。
  • 很奇怪。当我运行代码 sn-p 时它工作得很好,但是当我在我的文本编辑器中尝试它并在 chrome 中预览时,没有任何内容记录到控制台。甚至没有错误。
  • 对不起,我忘记了我已更改为格式。现在完美运行!非常感谢您的帮助。
【解决方案3】:

您可以使用moment.diff 函数。关注这些docs for moment difference,以便更好地理解。

示例 JS:

let d = moment(inputDate, 'M/D/YYYY');

if ( d.isValid() ) {
    let differenceInDays = moment().diff(d, 'days', true);  // moment() gives current date time.

    if (differenceInDays > 0) {
        console.log("Past current Date");
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2011-02-19
    • 2022-11-14
    • 1970-01-01
    • 2015-12-23
    • 2015-01-04
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多