javascript - tag - title of page html
Añadir días a la fecha de JavaScript (30)
Código muy simple para agregar días en la fecha en el script java.
var d = new Date();
d.setDate(d.getDate() + prompt(''how many days you want to add write here''));
alert(d);
Cómo agregar días a la Date
actual usando JavaScript. ¿Tiene JavaScript una función incorporada como AddDay
de .Net?
Creé estas extensiones anoche:
puede pasar valores positivos o negativos;
ejemplo:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
Estas respuestas me parecen confusas, prefiero:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () nos da milisegundos desde 1970, y 86400000 es el número de milisegundos en un día. Por lo tanto, ms contiene milisegundos para la fecha deseada.
Al usar el constructor de milisegundos se obtiene el objeto de fecha deseado.
Estoy usando la siguiente solución.
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
La fecha tiene un constructor que acepta un int. Este argumento representa el total de milisegundos antes / después del 1 de enero de 1970. También tiene un método setTime que hace lo mismo sin crear un nuevo objeto Date.
Lo que hacemos aquí es convertir los días a milisegundos y agregar este valor al valor proporcionado por getTime. Finalmente, le damos el resultado al constructor Date (milisegundos) o al método setTime (milisegundos).
Gracias Jason por tu respuesta que funciona como se esperaba, aquí hay una combinación de tu código y el práctico formato de AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Hay un setDate y un método getDate , que te permiten hacer algo como esto:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
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. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(ver también este violín )
La solución más sencilla.
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
Los documentos de mozilla para setDate () no indican que manejará los escenarios de fin de mes. Consulte https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
Establece la fecha()
- Establece el día del mes (1-31) para una fecha específica de acuerdo con la hora local.
Es por eso que uso setTime () cuando necesito agregar días.
Mi solución es:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
Esta solución no tiene problemas con el horario de verano. Además, uno puede agregar / sub cualquier compensación por años, meses, días, etc.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
es el codigo correcto
No, JavaScript no tiene una función incorporada, pero puedes usar una línea simple de código
timeObject.setDate(timeObject.getDate() + countOfDays);
Nuestro equipo considera date-fns la mejor biblioteca en este espacio. Considera las fechas como inmutables ( Moment.js probablemente nunca adoptará la inmutabilidad ), es más rápido y se puede cargar de forma modular.
const newDate = DateFns.addDays(oldDate, 2);
Para aquellos que usan Angular:
Solo haz:
$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
Puede crear su función de ayuda personalizada aquí
function plusToDate(currentDate, unit, howMuch) {
var config = {
second: 1000, // 1000 miliseconds
minute: 60000,
hour: 3600000,
day: 86400000,
week: 604800000,
month: 2592000000, // Assuming 30 days in a month
year: 31536000000 // Assuming 365 days in year
};
var now = new Date(currentDate);
return new Date(now + config[unit] * howMuch);
}
var today = new Date();
var theDayAfterTommorow = plusToDate(today, ''day'', 2);
Por cierto, esta es una solución genérica para agregar segundos, minutos o días lo que quieras.
Puedes crear uno con: -
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
Esto se encarga de incrementar automáticamente el mes si es necesario. Por ejemplo:
8/31 + 1 día se convertirá en 9/1 .
El problema con el uso de setDate
directamente es que se trata de un mutador y es mejor evitar ese tipo de cosas. ECMA consideró adecuado tratar a Date
como una clase mutable en lugar de una estructura inmutable.
Puedes usar JavaScript, no se requiere jQuery:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + ''/''+ mm + ''/''+ y;
Si puedes, usa moment.js . JavaScript no tiene muy buenos métodos nativos de fecha / hora. La siguiente es una sintaxis de Moment de ejemplo:
var nextWeek = moment().add(7, ''days'');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
Referencia: http://momentjs.com/docs/#/manipulating/add/
Solo pasé las edades tratando de averiguar cuál era el trato con el año, no agregando cuando se siguen los ejemplos a continuación.
Si solo desea agregar n días a la fecha que tiene, es mejor que vaya:
myDate.setDate (myDate.getDate () + n);
o la versión larga
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Esta cosa de hoy / mañana es confusa. Al establecer la fecha actual en su nueva variable de fecha, desordenará el valor del año. Si trabajas desde la fecha original no lo harás.
Supongo que también daré una respuesta:
Personalmente, me gusta intentar evitar la declaración gratuita de variables, las llamadas de métodos y las llamadas de constructores, ya que todas son costosas en cuanto al rendimiento. (dentro de lo razonable, por supuesto)
Iba a dejar esto como un comentario bajo la Respuesta dada por @AnthonyWJones pero lo pensé mejor.
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
Lo anterior respetará DST. Es decir, si agrega un número de días que cruza el horario de verano, la hora (hora) mostrada cambiará para reflejar eso.
Ejemplo:
02 de noviembre 2014 02:00 fue el final de DST.
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
Si desea conservar el tiempo en DST (de modo que las 10:30 seguirá siendo a las 10:30) ...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
Entonces, ahora tienes ...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
Tratar
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
El uso de setDate () para agregar una fecha no solucionará su problema, intente agregar algunos días a un mes de febrero; si intenta agregarle nuevos días, no resultará en lo que esperaba.
Tuve problemas con el horario de verano con la solución propuesta.
Al usar getUTCDate
/ setUTCDate
en setUTCDate
lugar, resolví mi problema.
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don''t mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
Viejo lo sé, pero a veces me gusta esto:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Yo uso algo como:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Funciona con horario de verano:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Trabaja con año nuevo:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Se puede parametrizar:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
prueba esto
function addDays(date,days) {
var one_day=1000*60*60*24;
return new Date(date.getTime()+(days*one_day)).toLocaleDateString();
}
Luego de la fiesta, pero si usas hay un excelente complemento llamado Moment: jQuery
,
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
¡Y muchas otras cosas buenas allí!
Edición: referencia a jQuery eliminada gracias al comentario de aikeru
Edición: en lugar de setTime()
(o setHours()
), podría hacerlo de esta manera:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Antiguo:
En lugar de usar setTime()
puedes usar setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Ver el JSFiddle ...
Respuesta correcta :
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Respuesta incorrecta :
Esta respuesta a veces proporciona el resultado correcto, pero a menudo devuelve el año y el mes incorrectos. La única vez que esta respuesta funciona es cuando la fecha en la que está agregando días tiene el año y el mes actuales.
// Don''t do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Prueba / Ejemplo
// Correct
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
// Bad Year/Month
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
// Bad during DST
function addDaysDstFail(date, days) {
var dayms = (days * 24 * 60 * 60 * 1000);
return new Date(date.getTime() + dayms);
}
// TEST
function formatDate(date) {
return (date.getMonth() + 1) + ''/'' + date.getDate() + ''/'' + date.getFullYear();
}
$(''tbody tr td:first-child'').each(function () {
var $in = $(this);
var $out = $(''<td/>'').insertAfter($in).addClass("answer");
var $outFail = $(''<td/>'').insertAfter($out);
var $outDstFail = $(''<td/>'').insertAfter($outFail);
var date = new Date($in.text());
var correctDate = formatDate(addDays(date, 1));
var failDate = formatDate(addDaysWRONG(date, 1));
var failDstDate = formatDate(addDaysDstFail(date, 1));
$out.text(correctDate);
$outFail.text(failDate);
$outDstFail.text(failDstDate);
$outFail.addClass(correctDate == failDate ? "right" : "wrong");
$outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
});
body {
font-size: 14px;
}
table {
border-collapse:collapse;
}
table, td, th {
border:1px solid black;
}
td {
padding: 2px;
}
.wrong {
color: red;
}
.right {
color: green;
}
.answer {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<th colspan="4">DST Dates</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>03/10/2013</td></tr>
<tr><td>11/03/2013</td></tr>
<tr><td>03/09/2014</td></tr>
<tr><td>11/02/2014</td></tr>
<tr><td>03/08/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr>
<th colspan="4">2013</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2013</td></tr>
<tr><td>02/01/2013</td></tr>
<tr><td>03/01/2013</td></tr>
<tr><td>04/01/2013</td></tr>
<tr><td>05/01/2013</td></tr>
<tr><td>06/01/2013</td></tr>
<tr><td>07/01/2013</td></tr>
<tr><td>08/01/2013</td></tr>
<tr><td>09/01/2013</td></tr>
<tr><td>10/01/2013</td></tr>
<tr><td>11/01/2013</td></tr>
<tr><td>12/01/2013</td></tr>
<tr>
<th colspan="4">2014</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2014</td></tr>
<tr><td>02/01/2014</td></tr>
<tr><td>03/01/2014</td></tr>
<tr><td>04/01/2014</td></tr>
<tr><td>05/01/2014</td></tr>
<tr><td>06/01/2014</td></tr>
<tr><td>07/01/2014</td></tr>
<tr><td>08/01/2014</td></tr>
<tr><td>09/01/2014</td></tr>
<tr><td>10/01/2014</td></tr>
<tr><td>11/01/2014</td></tr>
<tr><td>12/01/2014</td></tr>
<tr>
<th colspan="4">2015</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2015</td></tr>
<tr><td>02/01/2015</td></tr>
<tr><td>03/01/2015</td></tr>
<tr><td>04/01/2015</td></tr>
<tr><td>05/01/2015</td></tr>
<tr><td>06/01/2015</td></tr>
<tr><td>07/01/2015</td></tr>
<tr><td>08/01/2015</td></tr>
<tr><td>09/01/2015</td></tr>
<tr><td>10/01/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr><td>12/01/2015</td></tr>
</tbody>
</table>
//the_day is 2013-12-31
var the_day = Date.UTC(2013, 11, 31);
// Now, the_day will be "1388448000000" in UTC+8;
var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
// Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"
function addDays(n){
var t = new Date();
t.setDate(t.getDate() + n);
var month = "0"+(t.getMonth()+1);
var date = "0"+t.getDate();
month = month.slice(-2);
date = date.slice(-2);
var date = date +"/"+month +"/"+t.getFullYear();
alert(date);
}
addDays(5);
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write(''Today: <em>'');
document.write(new Date());
document.write(''</em><br/> New: <strong>'');
document.write(newDate);
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Ten cuidado, porque esto puede ser complicado. Al configurar "mañana", solo funciona porque su valor actual coincide con el año y el mes de "hoy". Sin embargo, la configuración de un número de fecha como "32" normalmente todavía funcionará bien para moverlo al mes siguiente.