2012-04-24 4 views
9

На странице, которую я создаю, есть требование либо отображать дату (например, 15 августа), либо, если дата сегодня, просто покажите время, например : 10 вечера.moment.js - отображать либо дату ИЛИ время

Что было бы лучшим способом уговорить это поведение из moment.js?

Формат, который мне нужен для даты: «d MMM», а формат времени будет «hA» (если минуты равны 0) или «h: mmA» (если минуты не равны 0).

Любые идеи о том, как подойти к этому? Похоже, функция calendar() может поддерживать что-то подобное?

ответ

12

Вы хотите использовать moment.calendar: установить все, кроме sameDay к г MMMM и sameDay к ч: мин. Вы не можете делать более тонкое зерно, чем это.

function timeTodayDateElse(date){ 
    moment.lang('en', { 
     'calendar' : { 
      'lastDay' : 'D MMMM', 
      'sameDay' : 'h:mmA', 
      'nextDay' : 'D MMMM', 
      'lastWeek' : 'D MMMM', 
      'nextWeek' : 'D MMMM', 
      'sameElse' : 'D MMMM' 
     } 
    }); 

    return moment(date).calendar(); 
} 
+1

Спасибо, это был вывод, к которому я пришел! – Fatal

+1

Ну, на самом деле, вы могли бы сделать оператор if, который проверяет, существует ли сегодня дата с помощью параметра moment.diff (см. Http://momentjs.com/docs/#/displaying/difference/), и если он не используется 'calendar ', в противном случае используйте формат * hA *. – Femi

+0

Эти строчные буквы должны быть в верхнем регистре D (иначе в нем будет отображаться день недели, а не месяц). –

1

Быстрый поиск в Google (с указанием момента времени .js) дает this link в документации. Вы должны быть в состоянии настроить это с помощью строковых строк.

+0

Спасибо, относительное время было близко, но функция календаря была более подходящей для меня. – Fatal

8

Вы можете написать микроплан для этого самостоятельно.

moment.fn.formatTimeToday = function() { 
    var now = moment(), 
     format = "d MMM"; 
    if (this.date() === now.date() && 
     Math.abs(this.diff(now)) < 86400000) { 
     // same day of month and less than 24 hours difference 
     if (this.minutes() === 0) { 
      format = "hA"; 
     } else { 
      format = "h:mmA"; 
     } 
    } 
    return this.format(format); 
} 
+0

Спасибо! Кроме того, спасибо за минуту, это потрясающе: D – captainpete

Смежные вопросы