在angularjs中格式化日期时间的简便方法是什么?

时间:2019-06-14 08:22:56

标签: angularjs

我已经花了好几个小时来寻找如何在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' }}

不,它不起作用。我想知道是否有一种简单的方法。可能在angular或javascript中有内置函数吗?

2 个答案:

答案 0 :(得分:1)

当尝试正确处理日期时-它会变得毛茸茸且困难,我感到您很痛苦。

我会走这条路线,并创建自己的角度过滤器,我发现它可以用于严肃的日期工作,尤其是在时区方面,内置的角度日期过滤器并不会很痒。我还发现在使用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数据库进行过滤的日期而自动进行。

我知道您没有要求它,但是认为它仍然对您和其他可能偶然发现的人有益。

快乐编码

答案 1 :(得分:0)

就像其他人提到的那样,您的字符串不是有效的日期字符串格式,但是非常接近。因此,一个简单的解决方案是代替创建新的日期对象,而可以找到一种将字符串转换为有效日期字符串的方法。您可以尝试以下操作:

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

其中数据是您的日期字符串。

Demo