2015-09-06 47 views
10

我想使用moment.calendar()選項沒有時間...所以而不是 「上週二下午5點」我想要「上週二」。 有沒有人知道到目前爲止是否有解決方案? 我發現這個小提琴http://jsfiddle.net/nawxZ/,這顯然是一個解決方案,但我不明白這應該如何工作? 感謝 卡爾moment.calendar()沒有時間

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

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

回答

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" 

應該做的伎倆。 docs are an invaluable source

+0

與您的解決方案,我需要定義日曆應用程序的所有支持語言..:/ – Luckylooke

+0

3年前,這將是如此 - 我不知道今天它是如何工作的!今天 –

+0

似乎是相同的情況:/ – Luckylooke

0

我創建了一個角度指令,只提供日期的日期。 如果你不使用角度,只需使用該功能。

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

從此刻開始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/

+0

怎麼能得到這個本地化?獲取地區「en」的「Today」和地區「de」的「Heute」?謝謝 – Luckylooke

+0

時刻已經有所有翻譯只是改變使用moment.lang(「德」)的語言環境檢查文檔 –

+0

我做了,但結果沒有翻譯,只有'dddd'部分被翻譯。它需要[今天]作爲靜態文本不動態本地化。檢查此:https://github.com/moment/moment/issues/4439 – Luckylooke

6

,這是可以正常使用。嘗試一下。

(時刻(時間).calendar()。分裂(「AT」))[0]

+1

謝謝! 請注意,如果您打算切換到任何其他語言環境,你應該使用 (矩()。日曆()分裂(」「))[0] 代替 如。 「Aujourd'huià16:30」(fr)或「heute um 16:30 Uhr」(de)將不起作用,否則 – CREOFF

+0

不適用於其他語言環境,@CREOFF即使您的修復程序不適用於某些語言環境..因爲本週未來的一些地方有兩個詞。例如在'sk'語言環境中,'Voštvrtoko 15:30'意思是'週四在15:30'。 – Luckylooke

+0

@Luckylooke是的,你應該檢查你想支持的所有語言環境的邏輯。越多的語言,你的腳本應該越聰明。比利時的網站通常僅限於NL,FR,DE和EN,因此更容易測試 – CREOFF

0

如果您沒有設置自定義時間,只工作了一天的基礎上,你可以使用這個簡單和多語言(經過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);