Особенности при работе с JSON датой в JS/TS, или как сделать дату из строки и наоборот

TypeScript

В JS/TS есть удобные методы для работы с JSON -  stringify для конвертации в строку и parse для обратного преобразования строки в объект. В TypeScript есть типы и есть тип данных Date, но без некоторых особенностей реализации не обошлось. Хоть и быстро, но не сразу, проблема была определена и решена, но какое-то время было потрачено. Есть некоторые особенности, как сделать дату из строки и наоборот в JavaScript / TypeScript.

Обнаружил проблему при работе с импортом данных из JSON с дальнейшим преобразованием и ошибке, что метод toISOString() для переменной типа дата падал с ошибкой.

Ниже небольшие заметки, как работает дата при JSON преобразованиях.

// Создаем переменную типа Date
const dateObject = new Date()
// Выведем в консоль ее значение и тип
console.log(dateObject, typeof dateObject) // 2023-11-06T15:16:21.578Z object

// Преобразуем переменную типа Date в строку формата JSON
const stringDate = JSON.stringify(dateObject)
// Выведем в консоль ее значение и тип
console.log(stringDate, typeof stringDate) // "2023-11-06T15:16:21.578Z" string

// Преобразуем JSON строку в объект
const parseDate = JSON.parse(stringDate)
console.log('parseDate', parseDate, typeof parseDate) // "2023-11-06T15:16:21.578Z" string

// Преобразуем считанную из JSON обратно в дату. Использую библиотеку moment для этого
const dateStringDate = moment.utc(stringDate, 'yyyy-mm-DD HH:mm:ss').toDate()
console.log(dateStringDate, typeof dateStringDate) // 2023-01-06T15:16:21.000Z object

В целом, объяснить поведение можно, но для тех, кто забыл Javascript после TypeScript - немного удивительно 🙂

JSON.parse - это не десериализация, а преобразование в объект. в Javascript дата - это объект, а не специальный тип. Ведь TS в конечном счете - это JS.


Комментариев нет »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment




Array


MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика