Как управлять часовым поясом с помощью DatePipe в Angular?

Предположим, База данных 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, или какой-то нестандартная труба. Но мне интересно, есть ли там непонятная проблема, которую я не могу понять.

Я думаю, чтобы получить такой настраиваемый вывод, вам нужно будет написать либо настраиваемый канал, возможно, даже просто функцию, которая отправляет значение обратно для сравнения с регулярным выражением, чтобы удалить лишний текст, который вам не нужен.

Sandra Willford 09.12.2018 02:11

Престижность за ссылки на документы в сообщении. показывает всем, что вы прочитали их перед тем, как прийти сюда :)

Sandra Willford 09.12.2018 02:15
"в стандартном формате" ... это не стандартный формат ISO
charlietfl 09.12.2018 02:23

@charlietfl, YYYY-MM-DD HH: MI: SS - это формат, в котором MySQL хранит временную метку. Кроме того, да, это не стандарт ISO, поэтому я сохраняю его как GMT для обеспечения согласованности.

Abhijit Srivastava 09.12.2018 02:37

Правильно, но безопаснее отправлять клиенту в формате ISO, с которым знаком javascript Date. Могут возникнуть проблемы с кроссбраузерностью при использовании нестандартных форматов. Является простой серверной частью конвертации

charlietfl 09.12.2018 02:39

@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'}}

Abhijit Srivastava 09.12.2018 02:40

@charlietfl. Возможно, я отправлю его в формате ISO GMT + 00: 00 из бэкэнда, а затем добавлю соответствующий часовой пояс. Спасибо за идею.

Abhijit Srivastava 09.12.2018 02:43

@AbhijitSrivastava, не беспокойтесь, я полагаю. Часовые пояса - отстой в период JS!

Sandra Willford 09.12.2018 02:45

@SandraWillford Ой, это боль.

Abhijit Srivastava 09.12.2018 02:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
9
1 525
2

Ответы 2

Я думаю, вы хотите, чтобы ваше время было в формате 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 09.12.2018 03:00

@ConnorsFan, я сделал правку, в которой упоминается, что datepipe дает неправильный вывод при поставке с датой в формате SQL. Собственно, он считает, что часовой пояс к нему уже добавлен.

Abhijit Srivastava 09.12.2018 03:08

Итак, как все предлагали, я заархивировал требование, выполнив следующие действия.

Шаг 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'}}

Спасибо всем.

Другие вопросы по теме