Jquery 法语数据表排序日期
Jquery datatable sort date in French
我以这个link为例。 http://datatables.net/blog/2014-12-18
我尝试用法语对日期列进行排序,但排序不正确。
看起来它不理解法语格式。如果我更改为英语日期并使用默认语言环境(英语),则它可以正常工作。
以下是我试过的。请让我知道我做错了什么。
$(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();
});
您的数据 table 中的日期未通过 isValid()
检查。您当前的格式是 D MMM yyyy
。在此格式中,yyyy
应替换为 YYYY
。此处大写是正确的表示法。
其次,您的月份符号没有通过严格的isValid()
测试。两种可能的解决方案:
去掉月份缩写后面的点。例如 janv
而不是 janv.
您的 table 将是:
<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。
修改插件以删除严格的条件,并将点添加到您的格式中。
插件修改部分:
// 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。
我以这个link为例。 http://datatables.net/blog/2014-12-18
我尝试用法语对日期列进行排序,但排序不正确。 看起来它不理解法语格式。如果我更改为英语日期并使用默认语言环境(英语),则它可以正常工作。
以下是我试过的。请让我知道我做错了什么。
$(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();
});
您的数据 table 中的日期未通过 isValid()
检查。您当前的格式是 D MMM yyyy
。在此格式中,yyyy
应替换为 YYYY
。此处大写是正确的表示法。
其次,您的月份符号没有通过严格的isValid()
测试。两种可能的解决方案:
去掉月份缩写后面的点。例如
janv
而不是janv.
您的 table 将是:
<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。
修改插件以删除严格的条件,并将点添加到您的格式中。
插件修改部分:
// 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。