Когда пытаешься получить правильные манипуляции с датой - это может стать волосатым и трудным, я чувствую твою боль.
Я бы пошел по пути и создал бы свой собственный угловой фильтр, который я нашел для серьезной работы с датами, особенно с часовыми поясами, встроенный угловой фильтр даты не совсем поцарапал этот зуд. Я также нашел кучу пользы от использования часовых поясов moment.js и moment.js
https://momentjs.com/
Прелесть момента в том, что он выполняет большую часть тяжелой работы, когда дело доходит до анализа и очень гибок.
Вот пример фильтра, который соответствует моим потребностям и может соответствовать вашим:
angular.module("global-app")
.filter('datetz', function ($filter) {
return function (date, dateFormat, timeZone) {
let new_date = date;
if (new_date == null) return null;
// Default timezone to Sydney if none selected
if (timeZone == null) timeZone = "Australia/Sydney";
if (new_date && timeZone) {
new_date = moment.tz(new_date, timeZone);
timeZone = new_date.format('Z');
new_date = new_date.toDate();
}
return $filter('date')(new_date, dateFormat, timeZone);
}
});
Чтобы использовать это:
{{ "2019-06-12 05:00" | datetz: "dd MMM yyyy hh:mm:ss": "America/Detroit" }}
Преимущество использования имени базы данных TZ для часового пояса, а не формата "+10: 00", которого ожидает угловой фильтр по умолчанию, состоит в том, что вы должны знать, что оно равно +10, а не +11 для даты, которую вы вводите через фильтр, тогда как использование имени базы данных TZ позволит автоматически рассчитать смещение часового пояса на основе даты, которую ваша фильтрация использует базу данных TZ в тот момент.
Я знаю, что вы не просили об этом, но думали, что это все равно будет полезно для вас и других, которые могут наткнуться на это.
Счастливое кодирование