Moment.calendar() без времени

Я хотел бы использовать параметр moment.calendar() без времени... так что вместо "В прошлый вторник в 17:00" Я хочу "в прошлый вторник". Кто-нибудь знает, есть ли на данный момент решение для этого? Я нашел эту скрипку http://jsfiddle.net/nawxZ/, которая, по-видимому, показывает решение для этого, но я не вижу, как это должно работать? благодаря Карл

function log(str) {
    $('body').append('<p>' + str + '</p>');
}

log(moment().calendar());
log(moment().calendar(true));

Ответ 1

начиная с момента 2.10.5, вы можете сделать:

moment(/*your date*/).calendar(null,{
    lastDay : '[Yesterday]',
    sameDay : '[Today]',
    nextDay : '[Tomorrow]',
    lastWeek : '[last] dddd',
    nextWeek : 'dddd',
    sameElse : 'L'
})

см. http://momentjs.com/docs/#/displaying/calendar-time/

Ответ 2

это работает отлично. попробуйте.

(момент (время).calendar(). split ( "at" )) [0]

Ответ 3

moment().calendar() поддерживает пользовательские форматированные строки и функции форматирования.

moment().calendar();
>> "Today at 9:06 AM"

Затем установите ваши форматированные строки

moment.locale('yourlang', {
    calendar: {
        lastDay: function () {
            return '[last]';
        },
        sameDay: function () {
            return '[Today]';
        }
    }
});

moment().calendar();

// Will now output
>> "Today"

должен сделать трюк. Документы являются неоценимым источником

Ответ 4

Я создал директиву angular, которая предоставляет календарь только с датой. Если вы не используете angular, просто используйте эту функцию.

 app.filter('amCalendarDate', function($translate) {
    return function(dt) {
        var md = moment(dt), key = '';

        if (!dt || !md || (md + '').toLowerCase() == 'invalid date')
            return '';

        var today = moment();
        var diff = today.diff(md, 'days');

        if (!diff)
            key = 'Today';
        else if (diff == -1)
            key = 'Tomorrow';
        else if (diff == 1)
            key = 'Yesterday';
        else if (Math.abs(diff) <= 6) {
            if (diff < 0)
                key = 'Next';
            else
                key = 'Last';

            var days = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');

            today.day(diff);

            key += ' ' + days[today.day()];
        }

        if (key) {
            // if you don't have translate, just return the key
            return $translate.amCalendarDate[key];
        } else
            return md.format('L');
    }
});

Ответ 5

Если у вас нет пользовательских настроек времени и они работают только на дневной основе, вы можете использовать это простое и многоязычное (проверенное для EN/DE/FR/IT) решение. (полные дни всегда сохраняются с типом времени 00:00)

let dateParts = moment(DATE).calendar().split(' '),
    index = dateParts.indexOf('00:00');

// ['Yesterday', 'at', '00:00', 'PM'] -> ['Yesterday']
dateParts.length = (index !== -1 ? (index - 1) : dateParts.length);