Respuestas:
var date = new Date();
date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)
date.setDate(date.getDate() - 1);
date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)
No muy eficiente, pero como línea:
var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
Lo anterior crea tres Date
objetos que son innecesariamente derrochadores. Esto se puede reducir a una sola instanciación con:
var yesterday = (function(){this.setDate(this.getDate()-1); return this})
.call(new Date)
O, si lo prefieres:
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
O, si prefiere ES6 con función de flecha:
let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Prueba esto
var d = new Date();
d.setDate(d.getDate() - 1);
Sorprendentemente, no hay un punto de respuesta para la solución de navegador cruzado más fácil
Para encontrar exactamente la misma hora de ayer:
var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000
Es decir, si desea liberarse de la dependencia, de lo contrario, le recomendaría usar http://momentjs.com
Para generalizar la pregunta y hacer otros cálculos de diferencias, use:
var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
esto crea un nuevo objeto de fecha basado en el valor de "ahora" como un entero que representa la época de Unix en milisegundos restando un día.
Hace dos días:
var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
Hace una hora:
var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
new Date(Date.parse(new Date()) - 86400000)
. Aunque me gusta Date.now (), tal vez intente eso en su lugar. Ahorrará una fecha extra.
Utilizo moment library, es muy flexible y fácil de usar.
En tu caso:
let yesterday = moment().subtract(1, 'day').toDate();
subtract
lugar deadd
new Date(new Date().setDate(new Date().getDate()-1))
//Create a date object using the current time
var now = new Date();
//Subtract one day from it
now.setDate(now.getDate()-1);
var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);
Esto producirá ayer a las 00:00 con minutos de precisión
var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);
d.setHours(0,0,0,0);
hará el truco
d.setHours(-1,0,0,0)
. Esto devolverá la fecha de ayer, pero puede que no sea la hora que desee (23:00:00)
Pruébalo, funciona para mí:
var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `
Esto me devolvió un objeto de fecha para ayer
var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)
para que pueda usar hoy y ayer
Aquí hay una línea que se usa para obtener la fecha de ayer en formato AAAA-MM-DD en el texto y manejar el desplazamiento de la zona horaria.
new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]
Obviamente se puede cambiar a la fecha de regreso, x días atrás en el tiempo. Para incluir el tiempo, etc.
console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"
// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000 // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000
Si desea obtener la fecha de ayer y formatear esa fecha en un formato legible para humanos, considere crear un DateHelper
objeto personalizado que se vea así:
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. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));
(ver también este violín )
Puede usar momentjs, es muy útil, puede lograr muchas cosas con esta biblioteca.
Obtenga la fecha de ayer con el tiempo actual
moment().subtract(1, 'days').toString()
Obtenga la fecha de ayer con un inicio de la fecha
moment().subtract(1, 'days').startOf('day').toString()
"Date.now () - 86400000" no funcionará en el día de finalización del horario de verano (que tiene 25 horas ese día)
Otra opción es usar Closure:
var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
getDate
devuelve el día del mes (por ejemplo: 1 - 31), pero en realidadsetDate(0)
establece la fecha para el último día del mes anterior. ¿Funciona esto en todos los navegadores?