Как сравнить дату в данных JSON, используя jmeshpath?

У меня есть один 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 ответ

Для этого вы можете использовать пользовательские функции JMESPath. Вам нужно будет преобразовать дату в эпоху, чтобы сравнить даты, потому что JMESPath не понимает объект даты.

Вы можете сослаться на пример здесь, в разделе "Пользовательские функции": 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)

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() чтобы получить объект даты, а затем вы можете сравнить его с текущей датой.

РЕДАКТИРОВАТЬ: Теперь вы можете напрямую использовать миллисекунды для сравнения дат.

Другие вопросы по тегам