0

我正在使用角矩中的 amCalendar 过滤器来显示视图中的时刻。

  • p.example:“今天凌晨 2:30”

amCalendar 过滤器不接受 Date 作为类型。我创建了这个函数,它返回传递一个Date 参数的短日期 ISO 字符串

function toShortISO(d){
        var date;
        date instanceof Date?
            date = d:
            date = toDate(d);

        function pad(n) {return n<10 ? '0'+n : n}
        return date.getUTCFullYear()
            + pad( date.getUTCMonth() + 1 )
            + pad( date.getUTCDate() )
            + 'T' + pad( date.getUTCHours() )
            + pad( date.getUTCMinutes() )
            + pad( date.getUTCSeconds() )
            + 'Z';
    }

传递一个日期,此函数返回20150905T060000Z (每个示例)。现在我可以使用这个字符串应用 amCalendar 过滤器。

在视图中按预期显示“今天凌晨 2:30”,但控制台中有此警告:

控制台警告

参考https ://github.com/moment/moment/issues/1407

在参考解释中,必须创建一个矩对象来解决这个问题,但我不知道如何,我认为该示例适用于 nodeJS 而不是 angularJS。

我试试这个:

function toShortISO(d){
        return moment(d.toISOString());
}

但不要工作。

有什么建议吗?

谢谢!

4

1 回答 1

3

要摆脱警告,您需要:

传入您的日期字符串的 ISO 格式版本:

  moment('2014-04-23T09:54:51');

传入你现在拥有的字符串,但告诉 Moment 字符串的格式:

  moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');

将您的字符串转换为 JavaScript Date 对象,然后将其传递给 Moment:

  moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));

最后一个选项是 Moment 目前支持的内置回退,带有已弃用的控制台警告。他们说他们不会在未来的版本中支持这种回退。他们解释说使用 new Date('my date') 太不可预测了。

基本上你需要告诉时刻如何解析你的日期格式,像这样:

 var parsedDate = moment.utc("150423160509", "YYMMDDHHmmss");
 var a = parsedDate.tz("Asia/Taipei");
 // I'm assuming you meant HH:mm:ss here
 console.log( a.format("YYYY-MM-DD HH:mm:ss") );
于 2015-09-01T11:39:28.123 回答