【问题标题】:compare timestamps in javascript比较javascript中的时间戳
【发布时间】:2018-03-10 18:39:35
【问题描述】:

我有一个日期以这种格式保存在一个字符串中:2017-09-28T22:59:02.448804522Z 这个值是由后端服务提供的。

现在,在 javascript 中,我如何比较该时间戳是否大于当前时间戳?我的意思是,我需要知道那个时间是否已经发生或者还没有计算小时和分钟,而不仅仅是日期。

【问题讨论】:

    标签: javascript timestamp


    【解决方案1】:

    您可以解析它以创建Date 的实例并使用内置的比较器:

    new Date('2017-09-28T22:59:02.448804522Z') > new Date()
    // true
    new Date('2017-09-28T22:59:02.448804522Z') < new Date()
    // false
    

    方便的是,日期已经采用Date 知道如何解析的标准格式(看起来像 ISO8601)。

    【讨论】:

      【解决方案2】:
      const anyTime = new Date("2017-09-28T22:59:02.448804522Z").getTime();
      const currentTime = new Date().getTime();
      if(currentTime > anyTime){
          //codes
      }
      

      【讨论】:

        【解决方案3】:

        您还可以将其转换为以毫秒为单位的 unix 时间:

        console.log(new Date('2017-09-28T22:59:02.448804522Z').valueOf())
        
        const currentTime = new Date('2017-09-28T22:59:02.448804522Z').valueOf()
            
        const expiryTime = new Date('2017-09-29T22:59:02.448804522Z').valueOf()
        
        if (currentTime < expiryTime) {
            console.log('not expired')
        }

        【讨论】:

        • 我不知道 Date 对象会接受这种格式。很高兴知道。
        • 您正在将易于阅读的 ISO 时间戳格式解析为非人类可读的数字量。如果我被选中,我会明确跳过这个答案。
        【解决方案4】:

        如果可以,我会使用 moment.js * https://momentjs.com/

        您可以创建一个时刻,指定字符串的确切格式,例如:

        var saveDate = moment("2010-01-01T05:06:07", moment.ISO_8601);
        

        那么,如果你想知道saveDate是否是过去的:

        boolean isPast = (now.diff(saveDate) > 0);

        如果您不能包含外部库,则必须对年、日、月、小时等进行字符串解析 - 然后手动进行数学运算以转换​​为毫秒。然后使用 Date 对象,你可以得到毫秒:

        var d = new Date();
        var currentMilliseconds = d.getMilliseconds();
        

        此时您可以将您的毫秒数与当前的毫秒数进行比较。如果 currenMilliseconds 更大,则 saveDate 是过去的。

        【讨论】:

          猜你喜欢
          • 2021-11-27
          • 2012-07-09
          • 1970-01-01
          • 2015-09-22
          • 2017-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多