web-dev-qa-db-fra.com

moment.calendar () sans le temps

Je voudrais utiliser l'option moment.calendar () sans le temps ... donc au lieu de "Mardi dernier à 17 heures" Je veux "Mardi dernier". Quelqu'un sait-il si moment a une solution pour cela maintenant? J'ai trouvé ce violon http://jsfiddle.net/nawxZ/ , qui montre apparemment une solution pour cela, mais je peux ' Vous ne voyez pas comment cela est censé fonctionner? merci carl

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

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

à partir du moment 2.10.5 vous pouvez faire:

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

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

22
Fareed Alnamrouti

cela fonctionne parfaitement. l'essayer.

(moment (heure) .calendar (). split ("à")) [0]

7
Mahfuzur Rahman

moment().calendar() supporte les chaînes formatées et les fonctions de formatage personnalisées.

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

Puis définissez vos chaînes formatées

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

moment().calendar();

// Will now output
>> "Today"

devrait faire l'affaire. Les docs sont une source inestimable

4
Henrik Andersson

J'ai créé une directive angulaire qui fournit un calendrier avec la date uniquement . Si vous n'utilisez pas angulaire, utilisez simplement la fonction. 

 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');
    }
});
0
Jonathan

Si vous n'avez pas défini d'heures personnalisées et travaillez uniquement sur une base journalière, vous pouvez utiliser cette solution simple et multilingue (testée pour EN/DE/FR/IT). (les journées complètes sont toujours sauvegardées avec un horaire de 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);
0
Fabian von Ellerts