Input date HTML5 et JS
💡 L'objectif de cette démonstration est de vous montrer comment personnaliser un élément input de type date en utilisant JavaScript.
Voici l'élément en question dans sa forme brute :
Maintenant, nous allons personnaliser l'élément. Cliquez ci-dessous :
Code :
HTML
<form>
<input type="date" placeholder="Choisissez une date" data-polyfill="all">
</form>
<script rel="prefetch" src="http://chemerisuk.github.io/better-dateinput-polyfill/bower_components/better-dom/dist/better-dom.js"></script>
<script rel="prefetch" src="http://chemerisuk.github.io/better-dateinput-polyfill/bower_components/better-i18n-plugin/dist/better-i18n-plugin.js"></script>
/*Polyfill*/
<script src="http://chemerisuk.github.io/better-dateinput-polyfill/build/better-dateinput-polyfill.js"></script>
CSS
input[type=text]{
padding: 0.5rem;
border: 2px solid #555;
margin: 0;
vertical-align: baseline;
width: 12rem;
}
JS
(function (DOM) {
"use strict";
var __ = DOM.__;
var reFormat = /('|")(?:\\?.)*?\1|\w+/g;
var pad = function (num, maxlen) {
return maxlen === 1 ? num : ("00" + num).slice(-maxlen);
};
var DAYS = "Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi".split(" ");
var MONTHS = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre".split(" ");
DOM.extend("time[is=local-time]", {
constructor: function () {
this.watch("datetime", this._changeValue);
this.watch("data-format", this._changeValue);
this._changeValue();
},
_changeValue: function () {
var datetimeText = this.get("datetime");
if (!datetimeText) {
return this.value("");
}
var value = new Date(datetimeText),
formattedValue = "";
if (isNaN(value)) {
formattedValue = "Date non valide";
} else {
var formatString = this.get("data-format");
if (!formatString) formatString = "E, dd MMM yyyy H:mm:ss";
formattedValue = formatString.replace(reFormat, function (str, quotes) {
switch (str) {
case "H":
case "HH":
str = pad(value.getHours(), str.length);
break;
case "h":
case "hh":
str = pad(value.getHours() % 12 || 12, str.length);
break;
case "m":
case "mm":
str = pad(value.getMinutes(), str.length);
break;
case "s":
case "ss":
str = pad(value.getSeconds(), str.length);
break;
case "p":
case "P":
if (value.getHours() > 11) {
str = str === "p" ? "pm" : "PM";
} else {
str = str === "p" ? "am" : "AM";
}
break;
case "d":
case "dd":
str = pad(value.getDate(), str.length);
break;
case "E":
str = __(DAYS[value.getDay()].slice(0, 2));
break;
case "EE":
str = __(DAYS[value.getDay()]);
break;
case "D":
case "DD":
var beginOfYear = Date.UTC(value.getUTCFullYear(), 0, 1);
var millisBetween = value.getTime() - beginOfYear - value.getTimezoneOffset() * 60 * 1000;
str = pad(Math.floor(1 + millisBetween / 86400000), str.length === 1 ? 1 : 3);
break;
case "M":
case "MM":
str = pad(value.getMonth() + 1, str.length);
break;
case "MMM":
str = __(MONTHS[value.getMonth()].substr(0, 3) + ".");
break;
case "MMMM":
str = __(MONTHS[value.getMonth()]);
break;
case "y":
case "yy":
str = pad(value.getFullYear() % 100, str.length);
break;
case "yyyy":
str = value.getFullYear();
break;
case "u":
str = value.getDay() || 7;
break;
default:
if (quotes) {
str = str.slice(1, -1);
}
}
return str.toString();
});
}
this.set("innerHTML", formattedValue);
}
});
DOM.importStrings("fr", MONTHS.reduce(function (memo, month) {
var shortMonth = month.slice(0, 3);
memo[shortMonth + "."] = shortMonth;
return memo;
}, {}));
})(window.DOM);
Vous rencontrez un problème avec cette démonstration ?
Avant de vous arracher les cheveux ou de crier au scandale, procédez à quelques simples vérifications. Si la démonstration fonctionne ici, il n'y a aucune raison pour qu'il n'en soit pas de même chez vous. De plus vous pouvez télécharger la démonstration. Si vraiment vous coincez, vous pouvez me contacter par mail (contact@guyom-design.com) et je vous aiderai si je le peux. Je ne réponds qu'aux messages respectueux.