2015-12-23 1 views
1

Я использую эту ссылку в качестве примера. http://datatables.net/blog/2014-12-18JQuery datatable sort date in French

Я стараюсь сортировать колонку даты на французском языке, но это не сортирует ее правильно. Похоже, что он не понимает французский формат. Если я перейду на английскую дату и использую стандартную локаль (английский), тогда она работает правильно.

Следующее, что я пробовал. Пожалуйста, дайте мне знать, что я сделал неправильно.

$(document).ready(function() { 

moment.locale('fr', { 
     months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), 
     monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), 
     weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), 
     weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"), 
     weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), 
     longDateFormat : { 
      LT : "HH:mm", 
      LTS : "HH:mm:ss", 
      L : "DD/MM/YYYY", 
      LL : "D MMMM YYYY", 
      LLL : "D MMMM YYYY LT", 
      LLLL : "dddd D MMMM YYYY LT" 
     },calendar : { 
      sameDay: "[Aujourd'hui à] LT", 
      nextDay: '[Demain à] LT', 
      nextWeek: 'dddd [à] LT', 
      lastDay: '[Hier à] LT', 
      lastWeek: 'dddd [dernier à] LT', 
      sameElse: 'L' 
     }, 
     relativeTime : { 
      future : "dans %s", 
      past : "il y a %s", 
      s : "quelques secondes", 
      m : "une minute", 
      mm : "%d minutes", 
      h : "une heure", 
      hh : "%d heures", 
      d : "un jour", 
      dd : "%d jours", 
      M : "un mois", 
      MM : "%d mois", 
      y : "une année", 
      yy : "%d années" 
     }, 
     ordinalParse : /\d{1,2}(er|ème)/, 
     ordinal : function (number) { 
      return number + (number === 1 ? 'er' : 'ème'); 
     }, 
     meridiemParse: /PD|MD/, 
     isPM: function (input) { 
      return input.charAt(0) === 'M'; 
     }, 
     // in case the meridiem units are not separated around 12, then implement 
     // this function (look at locale/id.js for an example) 
     // meridiemHour : function (hour, meridiem) { 
     //  return /* 0-23 hour, given meridiem token and hour 1-12 */ 
     // }, 
     meridiem : function (hours, minutes, isLower) { 
      return hours < 12 ? 'PD' : 'MD'; 
     }, 
     week : { 
      dow : 1, // Monday is the first day of the week. 
      doy : 4 // The week that contains Jan 4th is the first week of the year. 
     } 
    }); 



     moment.locale('fr'); 

    $.fn.dataTable.moment('d MMM yyyy','fr'); 
    $('.testtable').dataTable(); 
}); 

Вот полный пример: http://jsfiddle.net/9gohzd9t/71/

ответ

0

Даты в таблице данных не проходят проверку isValid(). Ваш текущий формат: D MMM yyyy. В этом формате yyyy следует заменить на YYYY. Верхний регистр - правильная нотация здесь.

Во-вторых, обозначение месяца у вас не проходит строгий тест isValid(). Два возможных решения:

  1. Удалите точку после коротких аббревиатур. Например janv вместо janv.

    Ваш стол будет:

    <table class="testtable"> 
        <thead> 
         <tr> 
          <th>Date</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr> 
          <td>12 mars 2001</td> 
         </tr> 
         <tr> 
          <td>1 janv 2015</td> 
         </tr> 
         <tr> 
          <td>1 févr 2014</td> 
         </tr> 
        </tbody> 
    </table> 
    

    См this JSFiddle для минимального примера.

  2. Измените плагин, чтобы удалить строгие критерии, и добавьте точку в свой формат.

    Измененная часть плагина:

    // Removed true as the last parameter of the following moment 
    return moment(d, format, locale).isValid() ? 
        'moment-'+format : 
    null; 
    

    Ваш новый формат:

    $.fn.dataTable.moment('D MMM. YYYY','fr'); 
    

    См this JSFiddle для примера этого.