Преобразование строки в дату дает неправильную дату ( 1)

#angular #typescript #casting

#angular #typescript #Кастинг

Вопрос:

Я видел несколько сообщений в stack overflow о проблеме с датами и часовым поясом, но не получил ни малейшего представления. У меня есть столбец даты в таблице, и у меня есть это как строка, поэтому перед сохранением в БД я конвертирую эти столбцы как дату и отправляю на сервер.

TS:

 item.effectiveDate=new Date(item.effectiveDate);
  

В Console.log (item.EffectiveDate) я получаю правильную дату, допустим, я указал 9 сентября 2020

Журнал консоли:

  effectiveDate: Wed Sep 09 2020 00:00:00 GMT 0530 (India Standard Time)
  

Но на стороне сервера даты отправляются примерно на 1 день меньше:

В DB:

 EffectiveDate
2020-09-08 18:30:00.000
  

Чего я ожидаю, так это того, что 2020-09-09 00:00:00.000

Комментарии:

1. Ваша дата в базе данных указана в формате / зоне GMT / UTC, а в консоли вы получаете ее в IST.

2. Есть идеи о том, как этого достичь? Я пробовал конвертировать возможными способами.

Ответ №1:

У меня была такая же проблема при обработке дат, но синтаксический анализ даты в формате UTC решил проблему для меня.

Измените свой TS-код, как показано ниже:

 item.effectiveDate=new Date(Date.parse(item.effectiveDate "T00:00:00 0000"));
  

Ответ №2:

Обычно базы данных будут содержать даты UTC, но вы можете обрабатывать преобразование на уровне пользовательского интерфейса на основе часового пояса пользователя. Вы можете использовать либо https://date-fns.org / или https://momentjs.com / для обработки преобразований на уровне пользовательского интерфейса.

Я бы предложил использовать стандартный формат ISO для передачи даты и времени из серверной части во внешний интерфейс, чтобы сохранить информацию о часовом поясе. Пример. 2020-08-14T10:41:20 05:30

Комментарии:

1. Спасибо за ваш ответ!