代码之家  ›  专栏  ›  技术社区  ›  Isha Padalia

如何使用jmeshpath比较JSON数据中的日期?

  •  0
  • Isha Padalia  · 技术社区  · 7 年前

    我有一个JSON数据,它包含如下日期 jan 23,2018 .

    如何将JSON数据日期与当前日期进行比较?

    [
      {
        "id": "user_1",
        "date": "jan 23, 2019"
      },
      {
        "id": "user_2",
        "date": "mar 3, 2017"
      },
      {
        "id": "user_3",
        "date": "feb 23, 2019"
      }
    ]
    

    我怎样才能得到数据的日期超过当前日期使用 jmespath ?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Shubham    7 年前

    const array = [
      {
        "id": "user_1",
        "date": "jan 23, 2019"
      },
      {
        "id": "user_2",
        "date": "mar 3, 2017"
      },
      {
        "id": "user_3",
        "date": "feb 23, 2019"
      }
    ];
    
    const newArray = array.map((value) => {
      value.date = new Date(value.date).getTime();
      
      return value;
    });
    
    console.log(newArray);
    console.log('current time in milliseconds ', new Date().getTime());
    
    /* array.forEach((value) => {
      const date = new Date(value.date);
      console.log(date);
    }); */
    
    // console.log('current date', new Date());

    循环数组并将日期字符串传递给 new Date() 获取日期对象,然后可以将其与当前日期进行比较。

    编辑:现在您可以直接使用毫秒来比较日期。

        2
  •  0
  •   Priyank Agrawal    5 年前

    您可以使用JMESPath自定义函数来实现这一点。为了比较日期,您需要将日期转换为epoch,因为JMESPath不理解date对象。

    您可以在此处的“自定义函数”部分中引用一个示例: https://pypi.org/project/jmespath/

    我创建了自己的自定义函数来检查过去的日期是否超过当前时间至少一定的秒数。这是我的密码:

    from jmespath import functions
    import time
    
    class CustomFunctions(functions.Functions):
    
        # the function name should always have a prefix of _func_ for it to be considered
        @functions.signature({'types': ['string']}, {'types': ['number']})
        def _func_hasTimeThresholdCrossed(self, jobdate, difference):
            jobdate = time.strptime(jobdate,'%Y-%m-%dT%H:%M:%S.%fZ')
            return time.time() - time.mktime(jobdate) > difference
    
    options = jmespath.Options(custom_functions=CustomFunctions())
    
    jmespath.search("hasTimeThresholdCrossed(createdAt,`1000000`)",{"createdAt":"2019-03-22T10:49:17.342Z"},options=options)