时间字符串到日期对象转换js angularJS

时间:2016-09-02 15:16:15

标签: javascript angularjs regex

我从REST api获取以下字符串, 20160220 我想把它变成20/02/2016

我正在使用angularJS。所以我需要一个过滤器。 我试过了

app.filter('myDateFilter', function() {

  return function(input) {

  var st = input;  
  var pattern = /(\d{4})(\d{2})(\d{2})/;
  var date = new Date(st.replace(pattern, '$1-$2-$3'));

  return date;

  }

});

在html中我使用了

                <td>
                    {{t["due-date"] | myDateFilter}}
                </td>

返回2016-02-20T00:00:00.000Z

正则表达式问题?你能不能给我一些应该用来代替的代码来生成20/02/2016。

2 个答案:

答案 0 :(得分:1)

Date天真地转换为字符串会产生您看到的输出:

&#13;
&#13;
console.log(new Date()) // "2016-09-02T15:19:07.921Z"
&#13;
&#13;
&#13;

相反,请确保在返回之前手动将日期格式化为字符串。例如。考虑到浏览器的区域设置,toLocaleDateString()会将Date转换为字符串:

&#13;
&#13;
console.log(new Date().toLocaleDateString()) // "09/02/2016"
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您正在做的是将String转换为Date()对象,这似乎对我而言。如果您尝试在视图中显示Date()对象,则会获得默认日期格式。

要自定义Date()对象所显示的格式,您需要将另一个过滤器链接到自定义过滤器。在这种情况下,您需要使用date过滤器:https://docs.angularjs.org/api/ng/filter/date

您只需将其添加到模板中,如下所示:

<td>
    {{t["due-date"] | myDateFilter | date : 'dd/MM/yyyy'}}
</td>

这种方式date过滤器会将自定义Date()过滤器返回的myDateFilter对象作为输入,并生成表示该对象作为输出的String

这是一个很好的例子,说明如何使用角度滤波器和滤波器链接。