moment.js不解析时间戳的时间

时间:2015-02-03 20:55:05

标签: javascript angularjs momentjs

我试图用json数据集中的moment.js解析时间戳。当我使用moment.format('MMMM Do YYYY, H:mm:ss')时,May 25th 2361, 0:00:00的输出为12351223423。对于所有测试的时间戳,它都是相同的。为什么它没有显示确切的时间/如何解决这个问题?

我的角度控制器:

$scope.timeFormat = function(timestamp) {
    var dt = moment.unix(timestamp);

    if(++recheckDate % 25 == 0)
    {
        // these vars are predefined
        today = moment().startOf('day');
        yesterday = moment().subtract(1, 'days');
    }

    if(dt.startOf('day').isSame(today))
        return dt.format('[Today], H:mm:ss');
    if(dt.startOf('day').isSame(yesterday))
        return dt.format('[Yesterday], H:mm:ss');

    return dt.format('MMMM Do YYYY, H:mm:ss');
};

html代码(剥离,控制器和应用程序适用于其他字段):

<div ng-repeat="item in data">
    <span class="time">{{ timeFormat(item.time) }}</span>
</div>

编辑:Here是在线演示。错误仍然存​​在。来源位于github

1 个答案:

答案 0 :(得分:2)

嗯,这比我应该花的时间更长......

dt.startOf('day')修改了dt,它没有克隆。

  

moment().startOf(String);
  通过将原始时刻设置为单位的开头来突变原始时刻   时间。

因此请使用clone()

if(dt.clone().startOf('day').isSame(today))
    return dt.format('[Today], H:mm:ss');
if(dt.clone().startOf('day').isSame(yesterday))
    return dt.format('[Yesterday], H:mm:ss');

或使用其他一些不会修改时刻的方法。

当你遇到这样的问题时,硬编码所有数字并在任何地方使用console.log