Jak přidat dny do aktuální Date
pomocí JavaScriptu. Má JavaScript vestavěnou funkci jako .Net je AddDay
?
Můžete ji vytvořit pomocí: -
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));
Toto se postará o automatické zvyšování měsíce v případě potřeby. Například:
8/31 + 1 den se stane 9/1 .
Problém s použitím setDate
přímo je v tom, že je to mutátor a takové věci se nejlépe vyhýbají. ECMA viděl, že je vhodné zacházet s Date
jako s mutovatelnou třídou spíše než s neměnnou strukturou.
Správná odpověď:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Nesprávná odpověd:
Tato odpověď někdy poskytuje správný výsledek, ale velmi často vrací nesprávný rok a měsíc. Jediná doba, kdy tato odpověď funguje, je, když datum, ke kterému přidáváte dny, má aktuální rok a měsíc.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Proof/Příklad
// 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>
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Buďte opatrní, protože to může být složité. Pokud nastavujete hodnotu „zítra“, funguje pouze proto, že aktuální hodnota odpovídá roku a měsíci „dnes“. Nicméně, nastavení na číslo data jako "32" normálně bude stále fungovat v pořádku přesunout na příští měsíc.
Moje jednoduché řešení je:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
toto řešení nemá problém s letním časem. Lze také přidat/sub libovolný posun pro roky, měsíce, dny atd.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
je správný kód.
Tyto odpovědi mi připadají matoucí, dávám přednost:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () nám dává milisekundy od roku 1970 a 86400000 je počet milisekund za den. Proto ms obsahuje milisekundy pro požadované datum.
Pomocí konstruktoru millisecond se získá požadovaný objekt data.
Snaž se
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Pomocí příkazu setDate () přidáte datum, které nevyřeší váš problém, zkuste přidat několik dní do měsíce měsíce, pokud se k němu pokusíte přidat nové dny, nebude to mít za následek to, co jste očekávali.
Právě strávil věky se snaží zjistit, co dohoda byla s rokem nepřidává, když následuje hlavní příklady níže.
Pokud chcete jednoduše přidat n dnů k datu, které jste měli, stačí jít:
myDate.setDate (myDate.getDate () + n);
nebo verze s dlouhým vnějškem
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Tohle dnes/zítra je matoucí. Nastavením aktuálního data do nové proměnné data se vyhodí hodnota roku. pokud pracujete od původního data, nebudete.
Pokud můžete, použijte moment.js . JavaScript nemá velmi dobré nativní metody data a času. Následuje příklad syntaxe Momentu:
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>
Tyto rozšíření jsem vytvořil včera v noci:
můžete předat buď kladné nebo záporné hodnoty;
příklad:
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;
}
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);
Nejjednodušší řešení.
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);
Pozdní strana, ale pokud používáte existuje vynikající plugin nazvaný Moment:jQuery
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
A spousta dalších dobrých věcí!
Edit: jQuery reference odstraněna díky komentáři aikeru
Díky Jasonovi za odpověď, která funguje podle očekávání, zde je mix z vašeho kódu a praktický formát AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Staré vím, ale někdy se mi líbí:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Ne, javascript nemá žádnou vestavěnou funkci, ale Můžete použít jednoduchý řádek kódu
timeObject.setDate(timeObject.getDate() + countOfDays);
Dokumenty mozilla docs for setDate () neindikují, že bude zpracovávat scénáře konce měsíce. Viz https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ Datum
setDate ()
To je důvod, proč používám setTime (), když potřebuji přidat dny.
Myslím, že odpovím také:
Osobně se snažím vyhnout bezdůvodné deklaraci proměnných, volání metod a volání konstruktorů, protože jsou všechny nákladné na výkon. (samozřejmě v rozumném rozsahu)
Chtěl jsem to nechat jako komentář pod odpovědí @AnthonyWJones, ale přemýšlel jsem o tom lépe.
// 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;
};
Výše uvedené bude respektovat DST. To znamená, že pokud přidáte počet dní, které překročí DST, zobrazený čas (hodina) se změní tak, aby to odrážel.
Příklad:
2. listopadu 2014 02:00 byl konec 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
Pokud chcete zachovat čas přes DST (takže 10:30 bude stále 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;
};
Takže teď máte ...
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
S navrhovaným řešením jsem měl problémy s letním časem.
Použijete-li místo toho getUTCDate
/setUTCDate
, vyřešil jsem svůj problém.
// 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;
}
Používám něco jako:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Pracuje s úsporou času:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Pracuje s novým rokem:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Lze ji parametrizovat:
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);
}
Bez použití druhé proměnné můžete nahradit 7 následujícími x dny:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
Používám následující řešení.
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);
Datum má konstruktor, který přijímá int. Tento argument představuje celkový počet milisekund před/po 1. lednu 1970. Má také metodu setTime, která provede totéž bez vytvoření nového objektu Date.
To, co zde děláme, je převádět dny na milisekundy a přidávat tuto hodnotu k hodnotě poskytované programem getTime. Nakonec dáme výsledek konstruktoru Date (milliseconds) nebo metodu setTime (milisekund).
Edit: Místo setTime()
(nebo setHours()
) to můžete udělat takto:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Starý:
Namísto použití setTime()
můžete použít setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Viz JSFiddle ...
Velmi jednoduchý kód pro přidání dnů v datech ve formátu Javascript.
var d = new Date();
d.setDate(d.getDate() + Prompt('how many days you want to add write here'));
alert(d);
Náš tým zvažuje data-fns nejlepší knihovnu v tomto prostoru. Zachází s daty jako immutable ( Moment.js pravděpodobně nikdy nepřijme nezměnitelnost ), je to rychlejší a lze jej načíst modulárně.
const newDate = DateFns.addDays(oldDate, 2);
Metoda setDate a getDate , která vám umožní něco takového udělat:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Chcete-li odečíst počet dní a formátovat data ve formátu čitelném pro člověka, měli byste zvážit vytvoření vlastního objektu DateHelper
, který vypadá takto:
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));
(viz také this Fiddle )
zkuste to
function addDays(date,days) {
var one_day=1000*60*60*24;
return new Date(date.getTime()+(days*one_day)).toLocaleDateString();
}
Můžete použít JavaScript, nevyžaduje 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;
//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"
Pro ty, kteří používají úhel:
Prostě:
$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
Zde můžete vytvořit vlastní funkci pomocníka
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);
Mimochodem, toto je obecné řešení pro přidávání sekund nebo minut nebo dnů, co chcete.
Generický prototyp bez proměnných, platí pro stávající hodnotu Datum:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
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);
Použil jsem tento přístup k získání správného data v jednom řádku, abych získal čas plus jeden den po tom, co lidé říkali výše.
((new Date()).setDate((new Date()).getDate()+1))
Jen jsem si myslel, že budu stavět na normálním (new Date())
:
(new Date()).getDate()
> 21
Pomocí výše uvedeného kódu můžu nyní nastavit vše v rámci Date()
v (new Date())
a chová se normálně.
(new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate()
> 22
nebo získat Date
objekt:
(new Date(((new Date()).setDate((new Date()).getDate()+1))))
odečíst 30 dnů použití
new Date(+yourDate - 30 *86400000)
var yourDate=new Date();
var d = new Date(+yourDate - 30 *86400000)
console.log(d)
2,39KB minifikováno. Jeden soubor. https://github.com/rhroyston/clock-js
console.log(clock.what.weekday(clock.now + clock.unit.days)); //"wednesday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 2))); //"thursday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 3))); //"friday"
<script src="https://raw.githubusercontent.com/rhroyston/clock-js/master/clock.min.js"></script>
js-joda je úžasná neměnná knihovna data a času pro javascript. Jedná se o přístav Java-8 DateTime ( JSR-310 ), který je nástupcem slavné knihovny Joda-Time . Zde je výňatek z jeho podvádět.
Do dneška přidejte 17 dní
LocalDate.now().plusDays(17);
Můžete také vytvořit požadované datum z více operací najednou.
LocalDate.now()
.plusMonths(1)
.withDayOfMonth(1)
.minusDays(17);
Nebo:
var d = LocalDate.parse('2019-02-23');
d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'
Nemůžu uvěřit, že v tomto vlákně není žádné řešení cut'n'paste po 5 letech!
SO: Chcete-li získat stejnou denní dobu bez ohledu na letní interference:
Date.prototype.addDays = function(days)
{
var dat = new Date( this.valueOf() )
var hour1 = dat.getHours()
dat.setTime( dat.getTime() + days * 86400000) // 24*60*60*1000 = 24 hours
var hour2 = dat.getHours()
if (hour1 != hour2) // summertime occured +/- a WHOLE number of hours thank god!
dat.setTime( dat.getTime() + (hour1 - hour2) * 3600000) // 60*60*1000 = 1 hour
return dat
or
this.setTime( dat.getTime() ) // to modify the object directly
}
Tam. Hotovo!