Ответ 1
начиная с момента 2.10.5, вы можете сделать:
moment(/*your date*/).calendar(null,{
lastDay : '[Yesterday]',
sameDay : '[Today]',
nextDay : '[Tomorrow]',
lastWeek : '[last] dddd',
nextWeek : 'dddd',
sameElse : 'L'
})
Я хотел бы использовать параметр moment.calendar() без времени... так что вместо "В прошлый вторник в 17:00" Я хочу "в прошлый вторник". Кто-нибудь знает, есть ли на данный момент решение для этого? Я нашел эту скрипку http://jsfiddle.net/nawxZ/, которая, по-видимому, показывает решение для этого, но я не вижу, как это должно работать? благодаря Карл
function log(str) {
$('body').append('<p>' + str + '</p>');
}
log(moment().calendar());
log(moment().calendar(true));
начиная с момента 2.10.5, вы можете сделать:
moment(/*your date*/).calendar(null,{
lastDay : '[Yesterday]',
sameDay : '[Today]',
nextDay : '[Tomorrow]',
lastWeek : '[last] dddd',
nextWeek : 'dddd',
sameElse : 'L'
})
это работает отлично. попробуйте.
(момент (время).calendar(). split ( "at" )) [0]
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"
должен сделать трюк. Документы являются неоценимым источником
Я создал директиву 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');
}
});
Если у вас нет пользовательских настроек времени и они работают только на дневной основе, вы можете использовать это простое и многоязычное (проверенное для 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);