在Angularjs中显示带有小时的日子

时间:2018-05-22 10:42:57

标签: angularjs momentjs

这是日期和时间。

Date 2018-05-25T10:35:04.000Z

预期产出= 3天12小时

我想显示与上面给出相同的日期和时间。目前,我正在使用moment.js。有没有办法像上面这样显示?

3 个答案:

答案 0 :(得分:1)

根据Zvi的建议,您可以使用AngularJS date filter

在你的控制器中说你有2个日期:

app.controller('AppCtrl', function($scope) {
    ctrl = this;

    ctrl.date1 = new Date("2018-05-22T22:35:04.000Z");
    ctrl.date2 = new Date("2018-05-25T10:35:04.000Z");
});

在HTML中,您会显示与日期过滤器的区别:

{{ctrl.date2 - ctrl.date1 | date:"dd 'days' HH 'hours'"}}

这是一个有效的JSFiddle example

答案 1 :(得分:0)

您可以使用此moment-precise-range

以下是完整示例:

calcDiff = (date : string) => {
    let diff_in_string = '';
    let original_date = moment(date);
    let date_time_now = moment();
    let diff_in_object: any = moment-presice.preciseDiffBetweenDates(original_date, date_time_now, true);
    if (diff_in_object.days > 0) {
        diff_in_string = diff_in_string + diff_in_object.days + ' ';
        if (diff_in_object.days === 1) {
            diff_in_string += 'Day '
        } else {
            diff_in_string += 'Days '
        }
    }
    if (diff_in_object.hours > 0) {
        if (diff_in_object.days > 0) {
            diff_in_string += 'and ' + diff_in_object.hours + ' '
        } else {
            diff_in_string += diff_in_object.hours + ' '
        }
        if (diff_in_object.hours === 1) {
            diff_in_string += 'Hour '
        } else {
            diff_in_string += 'Hours '
        }
    }
    diff_in_string += 'ago'
    return diff_in_string;
}

答案 2 :(得分:0)

您应该考虑使用HumanizeDuration库(您可以查看this answer)。 它允许您以任何语言翻译您想要的两个日期之间的差异。

例如:

var yourdate= moment().set({'year': 2018, 'month': 5, 'day': 22});
var today = moment();
var duration = moment.duration(today.diff(yourdate));
var humanized = humanizeDuration(duration, { units: ['d', 'h'], language: language, round: true });

您也可以使用垫片等格式化它。