Muszę zwiększyć wartość daty o jeden dzień w JavaScript.
Na przykład mam wartość daty 2010-09-11 i muszę przechowywać datę następnego dnia w zmiennej JavaScript.
Jak mogę zwiększyć datę o jeden dzień?
Muszę zwiększyć wartość daty o jeden dzień w JavaScript.
Na przykład mam wartość daty 2010-09-11 i muszę przechowywać datę następnego dnia w zmiennej JavaScript.
Jak mogę zwiększyć datę o jeden dzień?
Odpowiedzi:
Trzy opcje dla Ciebie:
Date
obiektu JavaScript (bez bibliotek):Moja poprzednia odpowiedź na nr 1 była błędna (dodała 24 godziny, nie biorąc pod uwagę przejścia na czas letni i zimowy; Clever Human zwrócił uwagę, że zakończy się niepowodzeniem z 7 listopada 2010 r. We wschodniej strefie czasowej). Zamiast tego odpowiedź Jigara to właściwy sposób na zrobienie tego bez biblioteki:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Działa to nawet w ostatnim dniu miesiąca (lub roku), ponieważ obiekt daty JavaScript ma sprytne podejście do najazdu:
(Ta odpowiedź jest obecnie akceptowana, więc nie mogę jej usunąć. Zanim została zaakceptowana, zasugerowałem PO, że akceptują odpowiedź Jigara, ale być może zaakceptowali tę odpowiedź dla pozycji 2 lub 3 na liście).
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Uwaga: add
modyfikuje instancję, do której ją wywołujesz, zamiast zwracać nową instancję, więc today.add(1, 'days')
zmodyfikuje today
to. Dlatego zaczynamy od klonowania var tomorrow = ...
).
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
konstruktora ( new Date(year, month, date)
); patrz sekcja 15.9.2.1 specyfikacji ; jeśli chcesz zaakceptować szereg formatów, zdecydowanie spójrz na DateJS .
Date.parse
(który zwraca liczbę milisekund, które możesz następnie przesłać new Date(ms)
). Ale uwaga, może różnić się w zależności od przeglądarki. Do niedawna wdrożenia mogły robić wszystko, co tylko chcieli Date.parse
. Nowa specyfikacja 5. edycji ma teraz minimalny format, który należy zaakceptować, ale na to jeszcze nie liczyłem.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, gdzie 1000 to przyrost milisekundowy.
Date
obiekty są zmienne. Trzy razy przechowujesz ten sam Date
obiekt w tablicy. Jeśli chcesz trzy różne Date
obiekty, musisz utworzyć trzy obiekty:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
ale Firefox nie. Myślę, że większość przeglądarek akceptuje, new Date("2009/09/11")
więc byłoby to łatwe rozwiązanie var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
go /
i nadzieja, że przeglądarki go zaakceptują, byłoby podzielenie łańcucha na części: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Zauważ, że używamy m-1
tutaj, ponieważ miesiące javascript są wartościami wyliczanymi (styczeń to 0, a nie 1), a d+1
ponieważ wykonuję inkrementację już w początkowym zadaniu (poprawi się automatycznie na 29 lutego itd.)
Żaden z przykładów w tej odpowiedzi wydaje się nie działać z dniami dostosowywania czasu letniego. W tych dniach liczba godzin w ciągu dnia nie wynosi 24 (są to 23 lub 25, w zależności od tego, czy „skaczesz do przodu”, czy „cofasz się”).
Poniższa funkcja AddDays javascript uwzględnia czas letni:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Oto testy, których użyłem do przetestowania funkcji:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
Najprostszym sposobem jest konwersja do milisekund i dodanie 1000 * 60 * 60 * 24 milisekund, np .:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
ale tak naprawdę jest podobny do getTime()
/ setTime()
, naprawdę.
new Date(Date.now()+1000*60*60*24);
Najpierw musisz przeanalizować ciąg znaków, zanim zastosujesz się do sugestii innych osób:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Jeśli chcesz ponownie w tym samym formacie, musisz to zrobić „ręcznie”:
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Ale sugeruję zdobycie Date.js, jak wspomniano w innych odpowiedziach, które pomogą ci dużo .
Uważam, że nic nie jest bezpieczniejsze niż .getTime()
i .setTime()
, więc powinno to być najlepsze i wydajne.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
z powodu nieprawidłowej daty (np. 31 + 1) jest zbyt niebezpieczne i zależy od implementacji przeglądarki.
Zdobycie kolejnych 5 dni:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Dwie metody:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: podobny do poprzedniej metody
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
Uzyskaj wartość ciągu daty za pomocą metody dateObj.toJSON () Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Pokrój datę ze zwróconego wartość, a następnie przyrost o żądaną liczbę dni.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Przykład
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Wynik
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
Nie jestem całkowicie pewien, czy jest to BŁĄD (przetestowany Firefox 32.0.3 i Chrome 38.0.2125.101), ale następujący kod nie zadziała w Brazylii (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Wynik:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Dodanie jednej godziny do daty sprawi, że będzie działać idealnie (ale nie rozwiąże problemu).
$date = new Date(2014, 9, 16,0,1,1);
Wynik:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
Wynikiem jest ciąg reprezentujący jutrzejszą datę. Użyj new Date (), aby uzyskać dzisiejszą datę, dodając jeden dzień za pomocą Date.getDate () i Date.setDate () i przekonwertując obiekt Date na ciąg.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Inkrementacja roku daty za pomocą waniliowej js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Na wypadek, gdyby ktoś chciał zwiększyć wartość inną niż data (dzień)
Za pośrednictwem natywnego JS, aby dodać jeden dzień, możesz wykonać następujące czynności:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Inną opcją jest użycie moment
biblioteki:
const date = moment().add(14, "days").toDate()
Przyrost dat świadomych stref czasowych / czasowych dla dat JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}