una sumar restar moment meses horas habiles fechas fecha entre dias calcular actual javascript date datetime

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 base Date.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:

http://www.datejs.com/

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);

Docs http://momentjs.com/docs/#/manipulating/add/


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:

http://simonwillison.net/2007/Dec/3/datejs/


var daysToSubtract = 3; $.datepicker.formatDate(''yy/mm/dd'', new Date() - daysToSubtract) ;


var my date = new Date().toISOString().substring(0, 10);