Güncel tarihe nasıl 1 gün ekleyebilirim?


93

JavaScript Date nesnesi kullanılarak bir gün artırılması gereken geçerli bir Date nesnem var. Şu kodu yerinde bulunduruyorum:

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

Nasıl bir gün ekleyebilirim?

+1 ekledim getUTCDay()ve getUTCDate()bunun dayolmasını beklediğim 'Pazar'ı göstermiyor .


1
"+1 ekle" ile ne demek istiyorsun? Ertesi gün veya başka bir şeye ihtiyacınız var mı?
Aleks G

Çalışmıyor date: (date.getUTCDate()+1)(benim için çalışıyor)? date(Tarih () olarak - Nesne ve Nesne-Anahtarı olarak ) ile bir adlandırma çakışması olabilir . Tarih () - Nesne farklı mı demeyi denediniz?
Dominik Schreiber

şu anda yalnızca şu şekilde görünüyor: <option value = "2012-04-06"> 6 Nis 2012 Cts </option> <option value = "2012-04-07"> 7 Nis 2012 </option>, hayır "Pazar 7 Nis 2012 "
franticfrantic

Yani 7 Aprihtiyacın olan bu değil (bana 'ertesi gün ekle'), bu Sunday. Eklemeyi unutmayın +1hem day:ve date:(mevcut cevabı önce bahseder gibi ya).
Dominik Schreiber

Yanıtlar:


238

Bir tarih nesnesine bir gün eklemek için:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);

Yinelenen soruya bakın: stackoverflow.com/questions/3674539/… . Bu cevap iyidir, ancak DST'yi hesaba katmaz. Yılın 24 saati olmayan 2 günü vardır.
Jess

2
@ Jess — temsil edilen DST üzerindeki değişiklikleri nasıl istediğinize bağlıdır. Soru tarihe nasıl ekleneceğini sordu, yukarıdaki cevap tam olarak bunu yapıyor. 24 saat eklemek o tarihi mutlaka artırmaz , setDate kullanarak yerel tarihe bir tane eklemek her zaman yapar.
RobG

İşte demek istediğim. 10 Mart Arttırım: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();olduğunu "2013-03-10T23:00:00.000Z". Bu, yukarıdaki işlevin benim için çalışmadığı ince bir durumdur.
Jess

1
Tabii ki değil! Bir UTC saatiyle başlarsınız, daha sonra onu yerel olarak dönüştürürsünüz, bir gün eklersiniz ve ardından UTC'ye geri dönüştürürsünüz. Böylece yerel tarihe bir gün eklendi , ancak UTC saatine yalnızca 23 saat eklendi . UTC tarihine 1 eklerseniz yerel saatle 01:00:00 geri alırsınız. Bu davranış gün ışığından yararlanmaya özgü değil, üç farklı saat dilimi kullanmanın bir sonucudur.
RobG

8
Aha. GetDate'in UTC'den yerel saate dönüştüğünü fark etmemiştim . a.setUTCDate(a.getUTCDate() + 1);<- bu Zulu tarihleriyle çalışır.
Jess

40

Benim mütevazi görüşüme göre en iyi yol milisaniye cinsinden tam bir gün eklemektir, kodunuzu nasıl hesaba kattığınıza bağlı olarak, ayın son gününde hata yapabilir.

örneğin 28 Şubat veya 31 Mart.

İşte bunu nasıl yapacağıma dair bir örnek:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imo bu doğruluğu garanti eder

işte başka bir örnek, sizin için işe yarayacağını sevmiyorum, ancak yukarıdaki doz kadar temiz değil

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

imho bu === 'POOP'

Bu nedenle, gün ışığından tasarruf etme süresi nedeniyle bazılarınız milisaniye yaklaşımım hakkında endişeleriniz oldu. Bu yüzden bunu çözeceğim. Birincisi, Bazı ülke ve eyaletlerde Gün ışığı tasarrufu yoktur. İkinci Tam olarak 24 saati eklemek tam bir gündür. Tarih numarası dozu yılda bir kez değişmiyorsa ancak 6 ay sonra düzelirse orada bir sorun görmüyorum. Ama kesin olmak ve kötü Date () ile başa çıkmak zorunda kalmak amacıyla bunu baştan sona düşündüm ve şimdi tamamen Date'den nefret ediyorum. Yani bu benim yeni Yaklaşımım

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

Şimdi eğlenceli kısım!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

Artık Resmi Geçerli uluslararası Tarih Nesnemiz Zulu meridyeninde açıkça yazılıdır. Şimdi tarihi değiştirmek için

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.

Gün ışığından yararlanma için saniye / milisaniye eklemek işe yaramaz.
Matt H

@Matt H bu fikri nereden aldın? Zaman UTC olarak milisaniye olarak 1970/01 / 01'den itibaren ayarlanır
Peter the Russian

1
Evet, ertesi gün UTC saatinde olacaktır, ancak yerel saatte olması gerekmez. ABD'de Spring Forward gününde, günde 25 saat var. Dolayısıyla, 00:00 saatinde örneğin 3/31/15 saatiniz varsa ve 86400000 milisaniye eklerseniz, Sprint Forward gününde yerel saat, o gün 25 saat olduğu için 23: 00'da 3/31/15 olacaktır.
Matt H

3
etkisini şöyle görebilirsiniz:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H

1
Bu fazla tasarlanmış. Böyle bir problem yaşıyorsanız, an gibi bir kitaplık veya işleri kolaylaştıracak bir şey kullanın.
Joshua Michael Wagoner

11

Mevcut tarih saatine bir gün (24 saat) eklemek istiyorsanız, aşağıdaki gibi milisaniyeler ekleyebilirsiniz:

new Date(Date.now() + ( 3600 * 1000 * 24))

9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

CodePen

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


Gün ışığından yararlanma yapılan yerlerde tüm günler 24 saat sürmediğinden, bir günlük milisaniye ekleme başarısız olur. Örneğin Şili, gün ışığından yararlanma saatini 14 Mayıs 2017 başında gece yarısında sona erdirecektir. Saatler gece yarısından 23: 00'e geri dönecektir. Bu nedenle, 2017-05-13 00:00:00 saatine 24 saat eklendiğinde 2017-05-13 23:00:00 oluşturulur ve tarih değişmez (bazı tarayıcılar bunu tam olarak gece yarısı, diğerleri ise bir milisaniye sonra yapar) . :-(
RobG

2

Esinlenen jpmottin içinde bu soruya , burada bir satır kod:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

Bu yardımcı olur umarım


-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');

Bu nedir? Bir kütüphane kullanıyor musunuz?
remborg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.