Что такое простой способ форматирования даты и времени в angularjs? - PullRequest
2 голосов
/ 14 июня 2019

Я часами искал, как отформатировать дату и время в angularjs, но нет простого способа, слишком сложного. Интересно, если есть.

Итак, у меня есть строка даты и времени, например 2019-06-14 12:15:00. Я хочу отформатировать его в 14 Jun 2019 12:15:00. Я пробовал это в представлении:

{{ '2019-06-14 12:15:00' | date : 'dd MMM yyyy hh:mm:ss' }}

Нет, это не работает. Интересно, есть ли простой способ сделать это? Может быть, есть встроенная функция в угловых или javascript?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Когда пытаешься получить правильные манипуляции с датой - это может стать волосатым и трудным, я чувствую твою боль.

Я бы пошел по пути и создал бы свой собственный угловой фильтр, который я нашел для серьезной работы с датами, особенно с часовыми поясами, встроенный угловой фильтр даты не совсем поцарапал этот зуд. Я также нашел кучу пользы от использования часовых поясов 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 в тот момент.

Я знаю, что вы не просили об этом, но думали, что это все равно будет полезно для вас и других, которые могут наткнуться на это.

Счастливое кодирование

0 голосов
/ 14 июня 2019

Как уже упоминали другие, ваша строка не является допустимым форматом строки даты, но она очень близка. Таким образом, простое решение для вас может быть вместо создания нового объекта даты, вы можете найти способ преобразовать вашу строку в допустимую строку даты. Вы можете попробовать следующее:

{{ data.replace(" ", "T") | date : 'dd MMM yyyy hh:mm:ss' }}

где data - ваша строка даты.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...