Я пытаюсь преобразовать строку Date в временную метку unix в Node.js.
Мой код ниже отлично работает на моем клиенте, но когда я запускаю его на своем сервере, я получаю сообщение об ошибке:
(node: 19260) UnhandledPromiseRejectionWarning: Отказ от необработанного обещания (id отклонения: 1): TypeError: input.substring не является функцией
Мой код:
function dateParser(input) {
// function is passed a date and parses it to create a unix timestamp
// removing the '.000' from input
let finalDate = input.substring(0, input.length - 4);
return new Date(finalDate.split(' ').join('T')).getTime();
}
Пример моего ввода будет 2017-09-15 00: 00: 00.000
Итак, что дает, почему это работает на моем клиенте, но не в узле, и как я буду дублировать функциональность в узле?
Создайте объект даты из строки ввода dateTime, а затем используйте getTime()
и разделите результат на 1000, чтобы получить getTime()
времени UNIX.
var unixTimestamp = Math.round(new Date("2017-09-15 00:00:00.000").getTime()/1000);
console.log(unixTimestamp);
Math.floor
, иначе вы будете генерировать время очень немного в будущем. На самом деле, я думаю, что Math.floor
всегда более уместен, так как обычно желательно отказаться от точности.
Я рекомендую использовать momentjs для обработки дат. Используя momentjs, вы можете сделать:
moment().unix(); // Gives UNIX timestamp
Если у вас уже есть дата и вы хотите получить отметку времени UNIX относительно этой даты, вы можете сделать следующее:
moment("2017-09-15 00:00:00.000").unix(); // I have passed the date that will be your input
// Gives out 1505413800
Он становится очень продуктивным при обработке даты/времени с использованием импульсов.
Временная метка Unix - это количество секунд с определенной даты. Функция Javascript getTime() возвращает количество миллисекунд с той же конкретной даты до указанной вами даты.
Итак, если вы разделите результат своей функции на номер 1000, вы получите отметку времени Unix и конвертируете ее с миллисекунд в секунды. Не забывайте игнорировать десятичные знаки.
Сообщение об ошибке, которое вы получаете, связано с тем, что значение ввода не является строкой.
dateParser()
и что ему передается?console.log(typeof input)
?