JavaScript añadir ceros a la izquierda hasta la fecha
-
25-09-2019 - |
Pregunta
He creado este script para calcular la fecha de 10 días de antelación en el formato de dd / mm / aaaa:
var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();
Es necesario disponer de la fecha aparece con ceros a la izquierda en el componente día y mes por medio de la adición de estas reglas a la secuencia de comandos. Me parece que no puede conseguir que funcione.
if (MyDate.getMonth < 10)getMonth = '0' + getMonth;
y
if (MyDate.getDate <10)get.Date = '0' + getDate;
Si alguien me podría mostrar dónde insertar estos en el guión estaría muy agradecido.
Solución
Prueba esto: 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:
Para explicar, .slice(-2)
nos da la última dos caracteres de la cadena.
Así que no importa qué, podemos añadir "0"
al día o mes, y sólo pregunta por los dos últimos ya que esos son los dos siempre que queramos.
Así que si los rendimientos MyDate.getMonth()
9
, será:
("0" + "9") // Giving us "09"
.slice(-2)
por lo que añadir el que nos da los dos últimos caracteres que es:
("0" + "9").slice(-2)
"09"
Sin embargo, si los rendimientos MyDate.getMonth()
10
, será:
("0" + "10") // Giving us "010"
por lo que añadir .slice(-2)
nosotros los dos últimos caracteres, o da:
("0" + "10").slice(-2)
"10"
Otros consejos
Este es un ejemplo de la href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date#Example.3A_ISO_8601_formatted_dates" rel="noreferrer"> objeto Date en la red de desarrolladores de Mozilla usando una función personalizada "pad", sin tener que extender prototipo Número de Javascript. La práctica función que dan como ejemplo es
function pad(n){return n<10 ? '0'+n : n}
Y a continuación ¿se está usando en su contexto.
/* 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
Se puede definir una función "str_pad" (como en php):
function str_pad(n) {
return String("00" + n).slice(-2);
}
La nueva forma moderna de hacer esto es usar toLocaleDateString
, ya que no sólo le permite dar formato a una fecha con la localización adecuada, incluso se puede pasar opciones de formato para archivar el resultado deseado:
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);
Cuando se salta el primer argumento se detectará el idioma del navegador, en lugar. Además, puede utilizar la opción 2-digit
en el año, también.
Si no es necesario para soportar los navegadores antiguos como IE10, esta es la manera más limpia para hacer el trabajo. IE10 y versiones inferiores no van a entender el argumento opciones.
Para usted gente del futuro (ECMAScript 2017 y más allá)
Solución
"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])
añade como número posible padString
en el objetivo String.prototype
de modo que la nueva longitud de la diana es targetLength
.
Ejemplo
"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;
}
// en uso:
(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();
He encontrado el camino más corto para hacer esto:
MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2');
agregará ceros a la izquierda de todos los dígitos individuales, solitarias
Se podría utilizar ternaria operador para dar formato a la fecha como un "if".
Por ejemplo:
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();
Entonces
(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())
sería similar a una sentencia if, donde si el getDate () devuelve un valor inferior a 10, y luego volver a '0' + la fecha, o bien devolver la fecha si es mayor de 10 (ya que no necesitamos añadir el 0 inicial). Lo mismo para el mes.
Editar: Olvidó que getMonth comienza con 0, por lo que añadió el 1 para dar cuenta de ello. Por supuesto podría también acaba de decir d.getMonth () <9:., Pero pensé que con el 1 sería ayudar a hacer más fácil la comprensión
Haga su vida más fácil y usar Moment.js un código de ejemplo:
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();
}
Me envolvió la respuesta correcta de la pregunta en una función que puede agregar múltiples cero a la izquierda de pero pasará al añadir 1 cero.
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));
}
para trabajar con solamente y no más de 2 dígitos números, esto también es un enfoque:
function zeroFill(i) {
return (i < 10 ? '0' : '') + i
}
Se puede proporcionar opciones como un parámetro para el formato de fecha. El primer parámetro es para la configuración regional, que puede que no necesite y la segunda es para las opciones. Para obtener más información, visite https://developer.mozilla.org/ es-eS / docs / web / JavaScript / Referencia / Global_Objects / Fecha / 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));
Otra opción, utilizando una función incorporada de hacer el relleno (pero que resulta en código muy larga!):
myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2})
+ '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2})
+ '/' + myDate.getFullYear();
// '12/06/2017'
Y otra, la manipulación de cadenas con expresiones regulares:
var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/');
// '2017/06/12'
Pero tenga en cuenta que uno va a mostrar el año en el start y el día en el final .
Hay otro enfoque para resolver este problema, utilizando slice
en JavaScript.
var d = new Date();
var datestring = d.getFullYear() + "-" + ("0"+(d.getMonth()+1)).slice(-2) +"-"+("0" + d.getDate()).slice(-2);
la fecha de regreso datestring
con formato como se espera: 01/09/2019
Otro enfoque está utilizando la biblioteca dateformat
: https://github.com/felixge/node-dateformat
Los siguientes objetivos en la configuración extracto, gancho en Date.protoype
y se aplican de configuración.
He usado un Array
a trozos en tienda y cuando push()
this
como un objeto Date
, me devuelve la longitud de iterar. Cuando he terminado, puedo usar join
en el valor return
.
Esto parece funcionar bastante rápido: 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();
Lo que quiero hacer, es crear mi propia aduana Fecha de ayuda que es similar al siguiente:
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));
(véase también esta violín )
Añadir un poco de relleno para permitir un cero - cuando sea necesario -. Y concatenar usando el delimitador de elección como cadena
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('/');
Como @John Henckel sugiere, comenzando con el toISOString () método facilita las cosas
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}`);
Adición a @modiX respuesta, esto es lo que funciona ... No deje que a medida vacío
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
}
Probar para una función básica, no hay bibliotecas requieren
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();
};