【问题标题】:How to compare date string using javascript如何使用javascript比较日期字符串
【发布时间】:2019-04-08 15:49:14
【问题描述】:

我有以下日期的字符串值Sun Apr 07 2019 00:00:00 GMT-0300,我需要比较与以下日期格式2019-04-08T03:00:00.000Z,注意两者都是同一天,我需要比较它们并返回一个相等的天数,

但我不知道如何使用 javascript 来执行此操作,有什么帮助吗?

我试图做这样的事情,但它并没有让我返回真实:

if (input) { 

     //input.value = "Sun Apr 07 2019 00:00:00 GMT-0300 (Horário Padrão de Brasília)"

     var situation = angular.isArray(item.situation) ? item.situation : [item.situation]; 

     // situation = 
     //[
     //    0: "2019-04-08T03:00:00.000Z"
     //    1: "2019-04-13T03:00:00.000Z"
     //]

     if (!angular.isArray(input.value)) {
        condition = situation.indexOf(input.value) >= 0;

     } else if (angular.isArray(input.value)) {
        condition = $window._.intersection(situation, input.value).length > 0;
     }
}

if (condition) {
    break;
}

//input.value = "Sun Apr 07 2019 00:00:00 GMT-0300 (Horário Padrão de Brasília)"

 situation = 
     [
         0: "2019-04-08T03:00:00.000Z"
         1: "2019-04-13T03:00:00.000Z"
     ]

【问题讨论】:

  • 您对“同一天”的标准是什么?您想要相同的 UTC 日期、本地日期还是特定的偏移量?

标签: javascript angularjs date


【解决方案1】:

2019 年 4 月 7 日星期日 00:00:00 GMT-0300

2019-04-08T03:00:00.000Z

请注意,两者是同一天

不,他们不是。

您可以将它们都转换为 ISO 字符串,并将它们的日期部分作为字符串进行比较(如果我正确理解了这个问题,您只想比较日期,而不是时间):

function isSameDate(date1, date2) {
  const [d1, ] = (new Date(date1)).toISOString().split('T');
  const [d2, ] = (new Date(date2)).toISOString().split('T');
  return d1 === d2;
}

【讨论】:

  • 可能是:let isSameDate = (d0, d1) => new Date(d0).toDateString() == new Date(d1).toDateString();。 :-) 但只是因为 ECMAScript 2018 或更高版本支持时间戳。支持以前版本的实现可能会在解析时失败。
  • @RobG .toDateString() 会将日期转换为您当地的时区,而 .toISOString() 将转换为 UTC。这可能是问题的根源,这就是我选择后者的原因,但感谢您的意见:)
  • 我的建议将它们作为本地进行比较,而您将它们作为 UTC 进行比较。没关系,只要将它们都转换为相同的偏移量进行比较即可。
  • @RobG 在大多数情况下你是对的,但由于这段代码可能会在前端运行,它可能会为不同时区的客户端产生不同的结果。
  • 当然可以,但是无论使用UTC还是本地作为纪元都会出现同样的问题。
【解决方案2】:

将所有值转换为Date 对象并进行比较。使用框架/库来执行此操作,因为手动将字符串解析为日期有很多可能出错的地方。

目前您正在比较文字Strings。因为"2019-04-08T03:00:00.000Z""2019-04-13T03:00:00.000Z" 都不匹配"Sun Apr 07 2019 00:00:00 GMT-0300 (Horário Padrão de Brasília)",所以您的第二个if 语句失败。

【讨论】:

    【解决方案3】:

    从字符串构建日期并比较天数(即自纪元以来的秒数/一天中的秒数):

    const sameDay = (dateString1, dateString2) => {
      let time1 = (new Date(dateString1)).getTime();
      let time2 = (new Date(dateString2)).getTime();
      return Math.floor(Math.abs((time1-time2))/(1000*60*60*24))==0;
    }
    
    console.log(
      sameDay('Sun Apr 07 2019 00:00:00 GMT-0300 (Horário Padrão de Brasília)','2019-04-08T03:00:00.000Z'),
      sameDay('Sun Apr 07 2019 00:00:00 GMT-0300 (Horário Padrão de Brasília)','2019-04-13T03:00:00.000Z'),
    );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2012-10-19
      相关资源
      最近更新 更多