JavaScript'te bir tarih değerini bir gün artırmam gerekiyor.
Örneğin, 2010-09-11 tarih değerine sahibim ve ertesi günün tarihini bir JavaScript değişkeninde saklamam gerekiyor.
Bir tarihi nasıl bir gün artırabilirim?
JavaScript'te bir tarih değerini bir gün artırmam gerekiyor.
Örneğin, 2010-09-11 tarih değerine sahibim ve ertesi günün tarihini bir JavaScript değişkeninde saklamam gerekiyor.
Bir tarihi nasıl bir gün artırabilirim?
Yanıtlar:
Sizin için üç seçenek:
Date
nesnesini kullanma (kitaplık yok):# 1 için önceki cevabım yanlıştı (24 saat ekledi, gün ışığından yararlanma saatine ve gün ışığından geçiş sürelerini hesaba katmamak; Akıllı İnsan 7 Kasım 2010'da Doğu saat diliminde başarısız olacağını belirtti). Bunun yerine, Jigar'ın cevabı bunu bir kütüphane olmadan yapmanın doğru yoludur:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
JavaScript tarih nesnesi, fareyle üzerine gelme konusunda akıllı olduğundan, bu ayın (veya yılın) son günü için bile geçerlidir:
(Bu cevap şu anda kabul ediliyor, bu yüzden silemiyorum. Kabul edilmeden önce OP'ye Jigar'ları kabul etmelerini önerdim, ancak belki de bunu listedeki # 2 veya # 3 öğeleri için kabul ettiler.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
( add
Yeni bir örnek döndürmek yerine, çağırdığınız örneği değiştirdiğinize dikkat edin , bu nedenle today.add(1, 'days')
değişiklik yapar today
. Bu yüzden klonlama op ile başlıyoruz var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
yapıcıya ( new Date(year, month, date)
) besleyebilirsiniz ; şartnamenin 15.9.2.1 bölümüne bakınız ; bir dizi formatı kabul etmek istiyorsanız, kesinlikle DateJS'e bakınız .
Date.parse
(bu da daha sonra besleyebileceğiniz birkaç milisaniye döndürür new Date(ms)
). Ancak dikkat, bu tarayıcıdan tarayıcıya değişebilir. Yakın zamana kadar uygulamalar, istedikleri her şeyi yapabilirdi Date.parse
. Yeni 5. sürüm belirtimi artık kabul edilmesi gereken minimum bir biçime sahip, ancak henüz buna güvenmem.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, burada 1000 milisaniyelik bir artış.
Date
nesneler değiştirilebilir. Aynı Date
nesneyi dizide üç kez saklıyorsunuz . Üç farklı Date
nesne istiyorsanız, üç nesne oluşturmanız gerekir: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")
ancak Firefox kabul etmez. Bence çoğu tarayıcı new Date("2009/09/11")
bu kadar kolay bir çözüm olabilir var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
ile /
ve tarayıcılar onu kabul edeceğini umarak bölüme dize bölmek olacaktır: 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);
Kullandığımız o Not m-1
javascript ay numaralandırma değerleri (Ocak değil 1, 0 olmak üzere) çünkü burada ve d+1
çünkü biz başlangıçtaki atamada zaten artımı yapıyorsunuz (29 Şubat vb. için otomatik olarak düzeltilecektir)
Bu yanıttaki örneklerin hiçbiri Yaz Saati Uygulaması ayar günleri için geçerli görünmemektedir. O günlerde, gün içindeki saat sayısı 24 değildir ("ileri geri" veya "geri düşmeye" bağlı olarak 23 veya 25'tir).
Aşağıdaki AddDays javascript işlevi gün ışığından yararlanma süresini hesaplar:
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;
}
İşte işlevi test etmek için kullandığım testler:
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());
En kolay yol milisaniyeye dönüştürmek ve 1000 * 60 * 60 * 24 milisaniye eklemektir:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
x ile çarparakDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
ama aslında getTime()
/ ile gerçekten benzer setTime()
.
new Date(Date.now()+1000*60*60*24);
Diğer kişilerin önerilerini takip etmeden önce dizenizi ayrıştırmanız gerekir:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Tekrar aynı formatta olmasını istiyorsanız, bunu "manuel olarak" yapmanız gerekir:
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("-");
Ancak, diğer yanıtlarda belirtildiği gibi Date.js'yi almanızı öneririm, bu size çok yardımcı olacaktır .
Hiçbir şeyin bundan daha güvenli olmadığını hissediyorum, .getTime()
ve .setTime()
bu da en iyisi ve performansı olmalı.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
geçersiz Tarih (31 + 1 gibi) için çok tehlikelidir ve tarayıcı uygulamasına bağlıdır.
İki yöntem:
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: Önceki yönteme benzer
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
DateObj.toJSON () yöntemini kullanarak tarihin dize değerini alın Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON İade edilen tarihi dilimleyin değerini girin ve istediğiniz gün sayısına göre artırın.
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);
}
Misal
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));
Sonuç
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
Bunun bir HATA (Test edilmiş Firefox 32.0.3 ve Chrome 38.0.2125.101) olup olmadığından tam olarak emin değilim, ancak Brezilya'da (-3 GMT) aşağıdaki kod başarısız olacak:
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+"");
Sonuç:
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
Tarihe bir Saat eklemek, mükemmel bir şekilde çalışmasını sağlayacaktır (ancak sorunu çözmez).
$date = new Date(2014, 9, 16,0,1,1);
Sonuç:
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
Yarının tarihinin dize olarak temsil edilmesiyle sonuçlanır. Bugünün tarihini almak, Date.getDate () ve Date.setDate () kullanarak bir gün eklemek ve Date nesnesini bir dizeye dönüştürmek için yeni Date () kullanın.
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();
Yerel JS aracılığıyla, bir gün eklemek için aşağıdakileri yapabilirsiniz:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Başka bir seçenek moment
kitaplığı kullanmaktır :
const date = moment().add(14, "days").toDate()
JavaScript tarihleri için saat dilimi / yaz saati uygulaması farkında tarih artışı:
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);
}