¿Alguien sabe de una manera fácil de tomar una cita (por ejemplo, hoy) y retroceder X días?
Entonces, por ejemplo, si quiero calcular la fecha 5 días antes de hoy.
¿Alguien sabe de una manera fácil de tomar una cita (por ejemplo, hoy) y retroceder X días?
Entonces, por ejemplo, si quiero calcular la fecha 5 días antes de hoy.
Respuestas:
Intenta algo como esto:
var d = new Date();
d.setDate(d.getDate()-5);
Tenga en cuenta que esto modifica el objeto de fecha y devuelve el valor de tiempo de la fecha actualizada.
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 days ago was: ' + d.toLocaleString());
new Date(new Date().setDate(new Date().getDate()-5))
eso será hace 5 días. En el ejemplo de la respuesta, páselo a una nueva fecha para obtener un objeto de fecha. Entonces new Date(d)
es lo que quieres.
setDate(-1)
fijará la fecha para el último día del mes
toString
métodos como toISOString
, toDateString
, etc.
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Si está realizando muchas manipulaciones de fecha dolorosas en toda su aplicación web, DateJS le hará la vida mucho más fácil:
getTime()
y setTime()
son milisegundos desde la época. No debería importar si el tiempo cruza el límite de un año.
Es algo parecido a esto:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};
entonces solovar daysAgo45 = getDaysAgo(45);
Noté que getDays + X no funciona durante los límites de día / mes. El uso de getTime funciona siempre que su fecha no sea anterior a 1970.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
obtener moment.js. Todos los niños geniales lo usan. Tiene más opciones de formato, etc. Donde
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
¡Opcional! Convierte a JS Date obj para enlace angular.
var date = new Date(dateMnsFive.toISOString());
¡Opcional! Formato
var date = dateMnsFive.format("YYYY-MM-DD");
Hice este prototipo para Date para poder pasar valores negativos para restar días y valores positivos para agregar días.
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
Entonces, para usarlo, simplemente puedo escribir:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
valores positivos y negativos para días para sumar y restar días respectivamente. Y debería funcionar en la instancia (como lo hacen otros métodos de fecha), no crear y devolver una copia.
Algunas de las soluciones existentes estaban cerca, pero no exactamente lo que quería. Esta función funciona con valores positivos o negativos y maneja casos límite.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Me gusta hacer las matemáticas en milisegundos. Entonces usaDate.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
y si te gusta formateado
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
NOTA: Date.now()
no funciona en navegadores antiguos (por ejemplo, IE8, creo). Polyfill aquí .
@socketpair señaló mi descuido. Como él / ella dice "Algún día del año tienen 23 horas, y unas 25 debido a las reglas de zona horaria".
Para ampliar eso, la respuesta anterior tendrá imprecisiones de horario de verano en el caso de que desee calcular el día LOCAL hace 5 días en una zona horaria con cambios de horario de verano y usted
Date.now()
le da el tiempo actual LOCAL ahora, o.toString()
que devuelve la fecha local y, por lo tanto, es incompatible con la Date.now()
fecha base en UTC. Sin embargo, funciona si está haciendo sus matemáticas todo en UTC, por ejemplo
A. Desea la fecha UTC hace 5 días desde NOW (UTC)
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B. Comienza con una fecha base UTC distinta de "ahora", utilizando Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Me parece que un problema con el método getDate () / setDate () es que convierte todo fácilmente en milisegundos, y la sintaxis a veces es difícil de seguir.
En cambio, me gusta evitar el hecho de que 1 día = 86,400,000 milisegundos.
Entonces, para su pregunta particular:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Funciona de maravilla.
Uso este método todo el tiempo para hacer cálculos de 30/60/365 días.
Puede extrapolarlo fácilmente para crear unidades de tiempo para meses, años, etc.
divida su fecha en partes, luego devuelva una nueva Fecha con los valores ajustados
function DateAdd(date, type, amount){
var y = date.getFullYear(),
m = date.getMonth(),
d = date.getDate();
if(type === 'y'){
y += amount;
};
if(type === 'm'){
m += amount;
};
if(type === 'd'){
d += amount;
};
return new Date(y, m, d);
}
Recuerde que los meses están basados en cero, pero los días no. es decir, nueva Fecha (2009, 1, 1) == 01 de febrero de 2009, nueva Fecha (2009, 1, 0) == 31 de enero de 2009;
Sin usar la segunda variable, puede reemplazar 7 por su espalda x días:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
function addDays (date, daysToAdd) {
var _24HoursInMilliseconds = 86400000;
return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};
var now = new Date();
var yesterday = addDays(now, - 1);
var tomorrow = addDays(now, 1);
He creado una función para la manipulación de la fecha. Puede sumar o restar cualquier número de días, horas, minutos.
function dateManipulation(date, days, hrs, mins, operator) {
date = new Date(date);
if (operator == "-") {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() - durationInMs);
} else {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() + durationInMs);
}
return newDate;
}
Ahora, llame a esta función pasando parámetros. Por ejemplo, aquí hay una llamada a la función para obtener la fecha antes de 3 días a partir de hoy.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Usa MomentJS .
function getXDaysBeforeDate(referenceDate, x) {
return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a');
}
var yourDate = new Date(); // let's say today
var valueOfX = 7; // let's say 7 days before
console.log(getXDaysBeforeDate(yourDate, valueOfX));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
Las principales respuestas condujeron a un error en mi código donde el primer día del mes establecería una fecha futura en el mes actual. Aquí esta lo que hice,
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
Una manera fácil de administrar las fechas es usar Moment.js
Puedes usar add
. Ejemplo
var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);
para mí, todas las combinaciones funcionaron bien con el siguiente código snipplet, el fragmento es para la implementación de Angular-2, si necesita agregar días, pase un número positivo de días, si necesita restar pasar un número negativo de días
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
Obtengo un buen kilometraje desactualizado.
d = new Date();
d.add(-10).days(); // subtract 10 days
¡Agradable!
El sitio web incluye esta belleza:
Datejs no solo analiza cadenas, sino que las corta limpiamente en dos
Si desea restar un número de días y formatear su fecha en un formato legible por humanos, debería considerar 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 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(ver también este violín )
Vea el siguiente código, reste los días de la fecha actual. Además, configure el mes según la fecha restada.
var today = new Date();
var substract_no_of_days = 25;
today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();
alert(substracted_date);
Al configurar la fecha, la fecha se convierte a milisegundos, por lo que debe volver a convertirla en una fecha:
Este método también tiene en cuenta el cambio de año nuevo, etc.
function addDays( date, days ) {
var dateInMs = date.setDate(date.getDate() - days);
return new Date(dateInMs);
}
var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
Puedes usar Javascript.
var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today
Para PHP,
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
Espero que te ayude.
Me convertí a milisegundos y deduje los días que el mes y el año no cambiarán y lógico
var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10), // Year
parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();
La esperanza ayuda
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;
var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
Uso de la sintaxis de la función JavaScript moderna
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
Intenta algo como esto
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate podría ser cualquier fecha
El límite podría ser la diferencia en el número de días (positivo para el futuro y negativo para el pasado)
Esto le dará el resultado de los últimos 10 días 110% de trabajo, no obtendrá ningún tipo de problema
var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;
puedes cambiar los días de resta de acuerdo a tus requerimientos
var daysToSubtract = 3;
$.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());