Как сравнить дату в данных 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()
чтобы получить объект даты, а затем вы можете сравнить его с текущей датой.
РЕДАКТИРОВАТЬ: Теперь вы можете напрямую использовать миллисекунды для сравнения дат.