Javascript add des zéros à ce jour
-
25-09-2019 - |
Question
Je l'ai créé ce script pour calculer la date de 10 jours à l'avance dans le format jj / mm / aaaa
var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();
Je dois avoir la date apparaissent avec des zéros sur la composante jour et mois par l'ajout de ces règles au script. Je ne peux pas sembler le faire fonctionner.
if (MyDate.getMonth < 10)getMonth = '0' + getMonth;
et
if (MyDate.getDate <10)get.Date = '0' + getDate;
Si quelqu'un pouvait me montrer où insérer ces derniers dans le script que je serais vraiment reconnaissant.
La solution
Essayez ceci: http://jsfiddle.net/xA5B7/
var MyDate = new Date();
var MyDateString;
MyDate.setDate(MyDate.getDate() + 20);
MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
+ ('0' + (MyDate.getMonth()+1)).slice(-2) + '/'
+ MyDate.getFullYear();
EDIT:
Pour expliquer, .slice(-2)
nous donne la dernier deux caractères de la chaîne.
Donc, peu importe quoi, nous pouvons ajouter "0"
au jour ou au mois, et il suffit de demander les deux derniers puisque ceux-ci sont toujours les deux que nous voulons.
Donc, si les rendements de MyDate.getMonth()
9
, ce sera:
("0" + "9") // Giving us "09"
afin d'ajouter .slice(-2)
sur qui nous donne les deux derniers caractères qui est:
("0" + "9").slice(-2)
"09"
Mais si MyDate.getMonth()
retourne 10
, il sera:
("0" + "10") // Giving us "010"
afin d'ajouter .slice(-2)
nous donne les deux derniers caractères, ou:
("0" + "10").slice(-2)
"10"
Autres conseils
Voici un exemple de la sur le Mozilla Developer Network en utilisant une fonction « pad » personnalisé, sans avoir à étendre le prototype du numéro de Javascript. La fonction pratique, ils donnent comme exemple
function pad(n){return n<10 ? '0'+n : n}
Et ci-dessous est-il utilisé dans le contexte.
/* use a function for the exact format desired... */
function ISODateString(d){
function pad(n){return n<10 ? '0'+n : n}
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'
}
var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z
Vous pouvez définir une fonction "str_pad" (comme en php):
function str_pad(n) {
return String("00" + n).slice(-2);
}
La nouvelle façon moderne de faire est d'utiliser
var date = new Date(2018, 2, 1);
var result = date.toLocaleDateString("en-GB", { // you can skip the first argument
year: "numeric",
month: "2-digit",
day: "2-digit",
});
console.log(result);
Lorsque vous sautez le premier argument, il détecte la langue du navigateur, au lieu. De plus, vous pouvez utiliser l'option 2-digit
année aussi.
Si vous n'avez pas besoin de soutenir les anciens navigateurs comme IE10, c'est la plus propre façon de faire le travail. IE10 et versions inférieures ne comprendront pas l'argument des options.
Pour vous les gens de l'avenir (ECMAScript 2017 et au-delà)
Solution
"use strict"
const today = new Date()
const year = today.getFullYear()
const month = `${today.getMonth() + 1}`.padStart(2, 0)
const day = `${today.getDate()}`.padStart(2, 0)
const stringDate = [day, month, year].join("/") // 13/12/2017
Explaination
String.prototype.padStart(targetLength[, padString])
ajoute que autant que possible padString
dans la cible de String.prototype
de telle sorte que la nouvelle longueur de la cible est targetLength
.
Exemple
"use strict"
let month = "9"
month = month.padStart(2, 0) // "09"
let byte = "00000100"
byte = byte.padStart(8, 0) // "00000100"
Number.prototype.padZero= function(len){
var s= String(this), c= '0';
len= len || 2;
while(s.length < len) s= c + s;
return s;
}
// utilisé:
(function(){
var myDate= new Date(), myDateString;
myDate.setDate(myDate.getDate()+10);
myDateString= [myDate.getDate().padZero(),
(myDate.getMonth()+1).padZero(),
myDate.getFullYear()].join('/');
alert(myDateString);
})()
/* value: (String)
09/09/2010
*/
var MyDate = new Date();
var MyDateString = '';
MyDate.setDate(MyDate.getDate());
var tempoMonth = (MyDate.getMonth()+1);
var tempoDate = (MyDate.getDate());
if (tempoMonth < 10) tempoMonth = '0' + tempoMonth;
if (tempoDate < 10) tempoDate = '0' + tempoDate;
MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();
J'ai trouvé le chemin le plus court pour faire ceci:
MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2');
ajoutera des zéros en tête à tous les solitaires, un seul chiffre
Vous pouvez utiliser l'opérateur ternaire pour formater la date comme une déclaration « si ».
Par exemple:
var MyDate = new Date();
MyDate.setDate(MyDate.getDate()+10);
var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear();
(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())
serait similaire à une instruction if, où si le getDate () retourne une valeur inférieure à 10, puis retourner un « 0 » + la date, ou bien retourner la date si elle est supérieure à 10 (puisque nous ne devons ajouter le 0). Idem pour le mois.
Edit: Vous avez oublié que getMonth commence par 0, donc ajouté le +1 en rendre compte. Bien sûr, vous pouvez aussi dire que d.getMonth () <9:., Mais je me suis dit en utilisant le +1 contribuerait à rendre plus facile à comprendre
Faites votre vie plus facile et utiliser Moment.js un exemple de code:
var beginDateTime = moment()
.format('DD-MM-YYYY HH:mm')
.toString();
// Now will print 30-06-2015 17:55
console.log(beginDateTime);
function formatDate(jsDate){
// add leading zeroes to jsDate when days or months are < 10..
// i.e.
// formatDate(new Date("1/3/2013"));
// returns
// "01/03/2103"
////////////////////
return (jsDate.getDate()<10?("0"+jsDate.getDate()):jsDate.getDate()) + "/" +
((jsDate.getMonth()+1)<10?("0"+(jsDate.getMonth()+1)):(jsDate.getMonth()+1)) + "/" +
jsDate.getFullYear();
}
J'Enveloppez la bonne réponse de cette question dans une fonction qui peut ajouter plusieurs mais conduisant les paramètres par défaut de zéro à ajouter 1 zéro.
function zeroFill(nr, depth){
depth = (depth === undefined)? 1 : depth;
var zero = "0";
for (var i = 0; i < depth; ++i) {
zero += "0";
}
return (zero + nr).slice(-(depth + 1));
}
pour travailler avec des chiffres et pas plus de 2 chiffres, cela est aussi une approche:
function zeroFill(i) {
return (i < 10 ? '0' : '') + i
}
Vous pouvez fournir des options en tant que paramètre à jour de format. Le premier paramètre est pour les paramètres régionaux que vous ne pourriez pas besoin et le second est pour les options. Pour plus d'informations, visitez https://developer.mozilla.org/ en-US / docs / Web / JavaScript / Référence / Global_Objects / date / toLocaleDateString
var date = new Date(Date.UTC(2012, 1, 1, 3, 0, 0));
var options = { year: 'numeric', month: '2-digit', day: '2-digit' };
console.log(date.toLocaleDateString(undefined,options));
Une autre option, en utilisant une fonction intégrée pour faire le rembourrage (mais entraînant un code assez long!):
myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2})
+ '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2})
+ '/' + myDate.getFullYear();
// '12/06/2017'
Et une autre, des chaînes avec des expressions manipulation régulières:
var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/');
// '2017/06/12'
Mais sachez que l'on va montrer l'année au start et le jour au end .
Il y a une autre approche pour résoudre ce problème, en utilisant slice
en JavaScript.
var d = new Date();
var datestring = d.getFullYear() + "-" + ("0"+(d.getMonth()+1)).slice(-2) +"-"+("0" + d.getDate()).slice(-2);
la date de retour de datestring
avec le format que vous attendez: 01/09/2019
Une autre approche utilise la bibliothèque de dateformat
: https://github.com/felixge/node-dateformat
Les objectifs suivants pour extraire la configuration, crochet dans Date.protoype
et la configuration sont applicables.
Je l'ai utilisé un Array
pour stocker des morceaux de temps et quand je push()
this
comme objet Date
, il me renvoie la longueur itérer. Quand je suis fait, je peux utiliser join
sur la valeur return
.
Cela semble fonctionner assez rapide: 0.016ms
// Date protoype
Date.prototype.formatTime = function (options) {
var i = 0,
time = [],
len = time.push(this.getHours(), this.getMinutes(), this.getSeconds());
for (; i < len; i += 1) {
var tick = time[i];
time[i] = tick < 10 ? options.pad + tick : tick;
}
return time.join(options.separator);
};
// Setup output
var cfg = {
fieldClock: "#fieldClock",
options: {
pad: "0",
separator: ":",
tick: 1000
}
};
// Define functionality
function startTime() {
var clock = $(cfg.fieldClock),
now = new Date().formatTime(cfg.options);
clock.val(now);
setTimeout(startTime, cfg.options.tick);
}
// Run once
startTime();
Qu'est-ce que je ferais, est de créer mon propre aide personnalisée Date qui ressemble à ceci:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(voir aussi ce Fiddle )
Ajoutez un peu de rembourrage pour permettre un zéro - le cas échéant -. Et concaténer en utilisant votre delimiter de choix en tant que chaîne
Number.prototype.padLeft = function(base,chr){
var len = (String(base || 10).length - String(this).length)+1;
return len > 0? new Array(len).join(chr || '0')+this : this;
}
var d = new Date(my_date);
var dformatted = [(d.getMonth()+1).padLeft(), d.getDate().padLeft(), d.getFullYear()].join('/');
Comme @John Henckel suggère, à commencer par le menu
const dateString = new Date().toISOString().split('-');
const year = dateString[0];
const month = dateString[1];
const day = dateString[2].split('T')[0];
console.log(`${year}-${month}-${day}`);
Ajout à réponse @modiX, voici ce qui fonctionne ... NE PAS LAISSER QUE comme vide
today.toLocaleDateString("default", {year: "numeric", month: "2-digit", day: "2-digit"})
let date = new Date();
let dd = date.getDate();//day of month
let mm = date.getMonth();// month
let yyyy = date.getFullYear();//day of week
if (dd < 10) {//if less then 10 add a leading zero
dd = "0" + dd;
}
if (mm < 10) {
mm = "0" + mm;//if less then 10 add a leading zero
}
essayer pour une fonction de base, pas de bibliothèques requises
Date.prototype.CustomformatDate = function() {
var tmp = new Date(this.valueOf());
var mm = tmp.getMonth() + 1;
if (mm < 10) mm = "0" + mm;
var dd = tmp.getDate();
if (dd < 10) dd = "0" + dd;
return mm + "/" + dd + "/" + tmp.getFullYear();
};