Предположим, База данных MySQL отправляет метку времени в стандартном формате SQL TIMESTAMPГГГГ-ММ-ДД ЧЧ: ИМ: СС.
Here, 2019-09-08 08:00:00
Теперь мне нужно отобразить его на моем веб-сайте Angular, управляя меткой времени в зависимости от часового пояса, в котором был открыт сайт.
Канал, упомянутый в документации Angular https://angular.io/api/common/DatePipe
{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz'}}
Выдает неправильный вывод как Воскресенье, 8 сентября 2019 г., 8:00:00 GMT + 05: 30 (потому что он автоматически считал часовой пояс, добавленный к предоставленному времени). Мне нужно, чтобы это было как при добавлении этого +05: 30 в 8 сентября 2019 г., 8:00:00. Далее я не хочу отображать GMT + 05: 30.
Кроме того, я очень хорошо знаю, что это можно решить, используя моменты.js, или просто чистый javascript, или какой-то нестандартная труба. Но мне интересно, есть ли там непонятная проблема, которую я не могу понять.
Престижность за ссылки на документы в сообщении. показывает всем, что вы прочитали их перед тем, как прийти сюда :)
@charlietfl, YYYY-MM-DD HH: MI: SS - это формат, в котором MySQL хранит временную метку. Кроме того, да, это не стандарт ISO, поэтому я сохраняю его как GMT для обеспечения согласованности.
Правильно, но безопаснее отправлять клиенту в формате ISO, с которым знаком javascript Date. Могут возникнуть проблемы с кроссбраузерностью при использовании нестандартных форматов. Является простой серверной частью конвертации
@SandraWillford Я знаю, что это можно решить с помощью специальной трубы. Далее я просмотрел много документации. Также я знаю, как использовать форматы в DatePipe. Теперь проблема в том, что он считает GMT + 05: 30 добавленным к 8 сентября 2019 года, 8:00:00 AM. Также это вполне очевидно, если вы напишете {{event.event_start_ts | date: 'EEEE, MMMM d, y, h: mm: ss a': 'GMT + 00: 00'}}
@charlietfl. Возможно, я отправлю его в формате ISO GMT + 00: 00 из бэкэнда, а затем добавлю соответствующий часовой пояс. Спасибо за идею.
@AbhijitSrivastava, не беспокойтесь, я полагаю. Часовые пояса - отстой в период JS!
@SandraWillford Ой, это боль.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы хотите, чтобы ваше время было в формате UTC, а ЗАТЕМ добавляете часовой пояс пользователя.
Время 2019-09-08 08:00:00 в вашей БД должно отображаться как September 8, 2019, 1:30:00 PM во внешнем интерфейсе, если у пользователя есть GMT+05:30.
Проходя через это, кажется, что вы не можете достичь желаемого результата во внешнем интерфейсе без сторонних библиотек или написания беспорядочного кода. Если вы не хотите использовать эти библиотеки, вам необходимо настроить серверную часть, чтобы включить часовой пояс.
Чтобы удалить GMT+05:30 и часть Sunday, просто отбросьте zzzz и EEEE.
{{event.event_start_ts | date:'MMMM d, y, h:mm:ss a'}}
@AbhijitSrivastava - Можете ли вы показать в вопросе, каким должен быть результат? Мне непонятно, почему Flyii следует перечитать вопрос еще раз.
@ConnorsFan, я сделал правку, в которой упоминается, что datepipe дает неправильный вывод при поставке с датой в формате SQL. Собственно, он считает, что часовой пояс к нему уже добавлен.
Итак, как все предлагали, я заархивировал требование, выполнив следующие действия.
Шаг 1: Установить часовой пояс MySQL для хранения абсолютного времени
SET GLOBAL time_zone = '+00:00';
SELECT @@global.time_zone, @@session.time_zone;
Шаг 2: УСТАНОВИТЬ часовой пояс подключения MySQL как '+00: 00'. (Для меня это было npm mysql) Пример формата даты ответа теперь 2019-09-08T03: 00: 00.000Z
{
host: "*******",
user: "*****",
password: "****",
database: "****",
timezone:"+00:00"
}
Шаг 3: Позвольте Angular творить чудеса, и форматирование не влияет на значение.
Фиксированный часовой пояс
{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz':'GMT+05:30' }}
Адаптируемый часовой пояс
{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz'}}
Спасибо всем.
Я думаю, чтобы получить такой настраиваемый вывод, вам нужно будет написать либо настраиваемый канал, возможно, даже просто функцию, которая отправляет значение обратно для сравнения с регулярным выражением, чтобы удалить лишний текст, который вам не нужен.