2010-09-03 46 views
19

Bence daha çok beyin osurduğumu düşünüyorum. Sadece bir haftanın belirli bir gününe kadar Date()'u hızlı bir şekilde ilerletmek ve bunun için Ay, Gün, Yıl'ı almak istiyorum.06 Haftanın belirli bir günün tarihini JavaScript olarak alın.

E.g. bugün 09/03/10'dur, ancak bir işlev (nextSession()) 09/08/10 (sonraki Çarşamba) dönmesini istiyorum.

Bunu nasıl yaparım? Düşünebildiğim en iyi şey, getDay() == 3 tarihine kadar setDate()'a bir gün eklemektir, ancak bu çok çirkin bir şeydir ...

P.S. jQuery de çok havalı.

cevap

29
function nextSession(date) { 
    var ret = new Date(date||new Date()); 
    ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1); 
    return ret; 
} 

Bu, bir sonraki Çarşamba gününe ayarlanacak. Zaten Çarşamba günü ise, sonuç belirli bir tarihten sonraki bir hafta sonra olacaktır.

DÜZENLEME: Bir parametre olmadan işlevini çağırarak olasılığı Eklendi: nextSession() - bu bugünden sonraki oturum tarihini döndürür İşte

+0

Değiştirildi: işlev xnextSession() { \t var ret = new Tarih(); \t ret.setDate (ret.getDate() + (3 - 1 - ret.getDay() + 7)% 7 + 1); \t return ret; } Bu hala doğru çalışıyor mu? Demek istediğim gibi ... –

+0

değiştiğini görüyorum var var = yeni Tarih(); ' 'Yeni Tarih (tarih)' olmalı, çünkü setDate() sadece ayın gününü ayarlayacaktır ve ay veya yıl gibi diğer bilgiler kaybolur. Değişken ret beyan etmemin nedeni, "date" değerini değiştirmek istemem. 'var ret = new Tarih (tarih)' referansın değil, 'tarih 'nesnesinin kopyasını oluşturur. DÜZENLEME: Üzgünüm, tabiki o gün için çalışacak, her şeyi görmedim^' – pepkin88

+0

Lanet olsun, bu temiz. Tek önerim, bir parametreye ilerlediğiniz günü yapmak olabilir. +1 – Ender

8

the DateJS library'u kullanın.

Date.parse('next wednesday'); 
+19

Programcılar için neyin kodu yok? +1 – Anurag

+0

@Anurag ciddi! –

+0

@Adam teşekkürler, mükemmel görünüyor, ama birisinin bana daha hafif bir ağırlık vermesi için onu beklemek için sabırsızlanıyorum. 25k + jQuery + jQuery UI + Bu uygulama için benim kişisel 40kb JS dosyası oldukça ağır haha ​​olduğunu Ama, bu çok serin bir lib –

5

sadece çarşamba gerekiyorsa, böyle bir şey yapmak mümkün olmalıdır:

function next(today) { 
    var offset = (today.getDay() < 3) ? 0 : 7; 
    var daysUntilWednesday = 3 + offset - today.getDay(); 
    return new Date().setDate(today.getDate() + daysUntilWednesday); 
} 

var wed = next(new Date()); 

DÜZENLEME: Böyle

falan? http://jsfiddle.net/zy7F8/1/

var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; 

function next(day) { 

    var today = new Date(); 
    var today_day = today.getDay(); 

    day = day.toLowerCase(); 

    for (var i = 7; i--;) { 
     if (day === days[i]) { 
      day = (i <= today_day) ? (i + 7) : i; 
      break; 
     } 
    } 

    var daysUntilNext = day - today_day; 

    return new Date().setDate(today.getDate() + daysUntilNext); 

} 

// insert a week day 
alert(new Date(next("Wednesday")));​​​​​​​​​ 

DÜZENLEME: aynı hafta içinde gelecek henüz girilen gün için bir düzeltme yapılmıştır.

+1

Birisi aşağı oylama için bir * akıllı * neden verebilir mi? – user113716

2

gitmek: http://jsfiddle.net/ePQuv/

js (hayır jQuery gerekli) 'dir:

function addDays(myDate,days) { 
    return new Date(myDate.getTime() + days*24*60*60*1000); 
} 

function subtractDays(myDate,days) { 
    return new Date(myDate.getTime() - days*24*60*60*1000); 
} 

function dateOfNext(weekdayNumber) { 
    var today = new Date(); 

    var lastSunday = subtractDays(today, today.getDay()); 

    var daysToAdd = weekdayNumber; 
    if (weekdayNumber <= today.getDay()) { 
     daysToAdd = daysToAdd + 7; 
    } 

    return addDays(lastSunday, daysToAdd); 
} 

Bu, haftanın geçerli gününü geçerli tarihe kadar, son pazar gününe çıkarmak için çıkarır. Ardından, bugün aradığınız "sonraki gün" e eşit ya da eşitse, haftayı almak istediğiniz haftanın 7 günü + ekler, aksi takdirde haftanın gününü ekler. Bu, verilen herhangi bir hafta içi gününüze inecek.

2

Bir sonraki gün numarasını döndürmek için bir işlev. Kullanmak için

function nextDay(dayNb){ 
return function(date){ 
    return new Date(date.getTime() + ((dayNb-date.getDay() +7) %7 +1) *86400000); 
}; 
} 

, istediğiniz gün sayısını ayarlamak 0: Pzt - 6: Güneş

var nextWed = nextDay(2); 
    alert(nextWed(new Date())); 
1

Ben tarihleri ​​ile çalışma durumunda moment.js kullanılması tavsiye edilir.

var nextmonday = moment().day(8).format('YYYY-MM-DD'); // e.g. 2015-10-26 
var nexttuesday = moment().day(9).format('YYYY-MM-DD'); // e.g. 2015-10-27 
var nextwednesday = moment().day(10).format('YYYY-MM-DD'); // e.g. 2015-10-28 
var nextthursday = moment().day(11).format('YYYY-MM-DD'); // e.g. 2015-10-29 

Farklı biçimleri almak ve daha güzel şeyler yapmak, göz atabilirsiniz: http://momentjs.com/

0

basit hesaplama:

//for next sunday, set 0, for saturday 6; wednesday == 3; 
 
var needDay = 3; 
 
var fromDate = new Date(); //or any date you calculate from 
 
fromDate.setDate(fromDate.getDate() + (7 - fromDate.getDay()) + needDay); 
 

 
console.log(fromDate);

+ (7 - FROMTarih. getDay()): Tarihi sunda tarihi değiştirmek için Tarihin gün miktarını ekler y.
+ needDay: Gününüzü, çarşamba günü, sadece +3;

İlgili konular