sumar - restar horas javascript
Resta días de una fecha en JavaScript (29)
¿Alguien sabe de una manera fácil de tomar una fecha (por ejemplo, Hoy) y volver X días?
Entonces, por ejemplo, si quiero calcular la fecha 5 días antes de hoy.
Utilice 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>
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 de límites.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Cuando se configura 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, 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) );
Encuentro que un problema con el método getDate () / setDate () es que convierte todo en milisegundos con demasiada facilidad, y la sintaxis a veces es difícil de seguir.
En lugar de eso, me gusta evitar el hecho de que 1 día = 86,400,000 milisegundos.
Por lo tanto, para su pregunta particular:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Funciona de maravilla.
Utilizo 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 por meses, años, etc.
Es algo parecido a esto:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
He creado una función para la manipulación de la fecha. Puedes 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, llama 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, "-");
Hice este prototipo para la fecha 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);
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());
Las respuestas principales llevaron 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
Me convertí en milisegundos y deduje días más, mes y año no cambiará y será 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
Me gusta hacer las matemáticas en milisegundos. Así que usa Date.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 más antiguos (p. Ej., IE8, creo). Poli-relleno aquí .
ACTUALIZACIÓN Junio 2015
@socketpair señaló mi descuido. Como él / ella dice: "Algún día en el año tiene 23 horas, y 25 debido a las reglas de la zona horaria".
Para ampliar eso, la respuesta anterior tendrá inexactitudes de ahorro de luz diurna en el caso de que desee calcular el día LOCAL hace 5 días en una zona horaria con cambios de ahorro de luz diurna y
- suponga (erróneamente) que
Date.now()
le da la hora actual LOCAL actual, o - use
.toString()
que devuelve la fecha local y, por lo tanto, es incompatible con la fecha baseDate.now()
en UTC.
Sin embargo, funciona si estás haciendo todos tus cálculos en UTC, por ejemplo
A. Quieres la fecha UTC hace 5 días desde AHORA (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. Comienzas con una fecha UTC base diferente a "ahora", usando Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Me gusta lo siguiente porque es una línea. No es perfecto con los cambios de horario de verano, pero generalmente es lo suficientemente bueno para mis necesidades.
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
Noté que getDays + X no funciona en los límites de día / mes. Usar 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));
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.
Si desea restar un número de días y formatear su fecha en un formato legible por humanos, debe considerar crear un objeto DateHelper
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 )
Tengo buen kilometraje fuera de fecha.js:
d = new Date();
d.add(-10).days(); // subtract 10 days
¡Bonito!
El sitio web incluye esta belleza:
Datejs no solo analiza cadenas, las corta en dos
Una forma fácil de administrar fechas es usar Moment.js
Puede utilizar 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);
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 se basan 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;
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! Convertir a JS fecha obj para enlace angular.
var date = new Date(dateMnsFive.toISOString());
¡Opcional! Formato
var date = dateMnsFive.format("YYYY-MM-DD");
para mí todas las combinaciones funcionaron bien con el siguiente código de código, el fragmento es para la implementación de Angular-2, si necesita agregar días, pasar número positivo de días, si necesita restar pasar 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)
);
}
sin usar la segunda variable, puedes reemplazar 7 por tu espalda x días
let d = new Date (new Date (). getTime () - (7 * 24 * 60 * 60 * 1000))
var d = new Date();
document.write(''Today is: '' + d.toLocaleString());
d.setDate(d.getDate() - 100);
document.write(''<br>100 days ago was: '' + d.toLocaleString());
var d = new Date();
document.write(''Today is: '' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write(''<br>5 days ago was: '' + d.toLocaleString());
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 );
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);
var my date = new Date().toISOString().substring(0, 10);
Solo te puede dar fecha como 2014-06-20. la esperanza ayudará
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Si está realizando una gran cantidad de manipulaciones de citas en toda su aplicación web, DateJS hará su vida mucho más fácil:
var daysToSubtract = 3;
$.datepicker.formatDate(''yy/mm/dd'', new Date() - daysToSubtract) ;
var my date = new Date().toISOString().substring(0, 10);