js计算两个日期相差的时间,进行日期间的比较

我们在展示订单、工单、项目单这些有日期的数据的时候,很多时候需要根据截止时间来对临期单子进行特殊标注,改变状态。

这个时候就会面临两个日期之间的比较。
一般来说,日期是不能直接进行运算来计算出间隔的时间。所以需要一个处理日期的方法,使他们能进行加减运算、比较等。

日期进行比较的前提是处理成为对应的毫秒数,然后再进行比较。
这里需要用到Date的getTime()方法。
getTime()方法可以直接把日期转换为1970年1月1日到当前日期的毫秒数,但是他需要的是标准时间:
eg:

Sat Aug 06 2022 14:40:44 GMT+0800 (中国标准时间)

所以在使用之前我们一般要把格式化后的日期转换成标准时间的形式。


正则表达式匹配格式化时间(test()、replace())

/\d{4}-\d{1,2}-\d{1,2}/

类似于2022-08-06 14:40:44这种格式的日期时间是我们常见的,上面的正则表达式可以帮助我们验证我们要进行计算的日期是否符合该格式。

test()用于检测一个字符串是否匹配某个模式
replace(/-/g, “/”) 的使用场景:把-替换成 / 主要用在时间比较方面

使用的话就是:

//先定义验证的正则表达式
let reTest=/\d{4}-\d{1,2}-\d{1,2}/;
//使用test()方法进行验证,该方法会返回布尔值
console.log(reTest.test('2022-08-06 15:06:56'));
//true。我们根据返回的结果再进行判断是否进行下一步的转换标准时间操作
let s=new Date('2022-08-06 15:06:56')//Sat Aug 06 2022 15:06:56 GMT+0800 (中国标准时间)
//再使用replace(/-/g, '/')正则表达式把原有的日期格式调整一下
s=s.replace(/-/g, '/')
//接下来使用getTime()方法,把日期转换成毫秒数
let ms=s.getTime()//1659770025000,一般也可以称为时间戳
//毫秒之间就可以进行运算了,结果可以处理成分钟、小时、天数等

js获取两个日期相差的小时数

    getHour(s1, s2) {
      var reDate = /\d{4}-\d{1,2}-\d{1,2}/;
      s1 = new Date((reDate.test(s1) ? s1 : '2023-1-1 ' + s1).replace(/-/g, '/'));
      s2 = new Date((reDate.test(s2) ? s2 : '2023-1-1 ' + s2).replace(/-/g, '/'));
      var ms = s2.getTime() - s1.getTime();
      console.log(s1.getTime());
      if (ms < 0) return 0;
      return Math.floor(ms / 1000 / 60 / 60); //小时
    },

方法接收的两个参数格式一定要统一,我这里使用的是:2022-08-06 15:06:56格式。

格式化当前日期

let newDate = moment(new Date()).format(‘YYYY-MM-DD HH:mm:ss’);

moment.js为我们提供了各种形式的格式化日期的样式。

计算间隔

let interval=this.getHour(newDate,'2022-08-06 15:06:56');//得到的就是相差的小时数了

拿到间隔之后就能和约定的截止时间比较,进而把符合条件的数据进行标注。

你可能感兴趣的:(前端基础,javascript,开发语言,ecmascript)