2012-10-30 22 views
9

Bir ayın veya yılın tüm günlerine sahip olmanın bir yolu var mı? Bir tarihçede bazı belirli günleri devre dışı bırakmak için bunu arıyorum, bu günleri devre dışı bırakmak için arka ofisde bir sayfa olurdu.Date nesnesinde bir aydaki tüm günleri bulun

Bu nedenle, tüm günler bir ay içinde gösterilmeli ve her günün altında "etkin ya da devre dışı bırak" düğmesi eklenmelidir. Tarih nesnesini bu günlerde bulmanın bir yolu var mı? Bu bağlantıyı örneğin şu şekilde buldum: Displaying all the days of a month ama gerçekten anlamadım, ayrıca Java, javascript'te bir çözüm bulmaya çalışıyorum.

bir datepicker tarihleri ​​devre dışı bırakmak için Yardımlarınız

+0

için Array.indexOf uygulayan kodu sağlar? Amaç Cevabınız Cevabınız için – charlietfl

cevap

37

Bir aydaki tüm günlerin bir listesini almak için, bir ayın ilk günü Date ile başlayabilirsiniz, ay değişene kadar günü artırın.

/** 
* @param {int} The month number, 0 based 
* @param {int} The year, not zero based, required to account for leap years 
* @return {Date[]} List with date objects for each day of the month 
*/ 
function getDaysInMonth(month, year) { 
    var date = new Date(year, month, 1); 
    var days = []; 
    while (date.getMonth() === month) { 
     days.push(new Date(date)); 
     date.setDate(date.getDate() + 1); 
    } 
    return days; 
} 

Örnek http://jsfiddle.net/kKj8h/1/

+0

Çok teşekkürler Juan, tam olarak ihtiyacım olan şey bu! Sayesinde kod date.setDate için çok – Paul

+0

küçük düzeltme (date.getDate() + 1); Bu işe yaramazsa o test durumu nedir date.push dizi çağrısı – Timothy

+0

@Timothy önce gitmeli? –

4

emin değilim: Bu eklentisini kullanabilirsiniz.

Bunu yaparak bir ay boyunca günde bir dizi oldukça kolay inşa edebilir

: onunla istediğini hemen hemen yapabilirsiniz günlerin bu diziyi kullanarak

var numOfDays = new Date(2012, 10, 0).getDate(); //use 0 here and the actual month 
var days = new Array(); 

//This will construct an array with all the elements represent the day of the week 
//(i.e. Oct 30th would be days[30-1] or days[29]) and the value would be the actual 
//day of the week (i.e. Tuesday which is representing by the number 2) 
for(var i=0;i<=numOfDays;i++) 
{ 
    days[i] = new Date(2012,9,i+1).getDay(); //use month-1 here    
} 
//This will give you a number from 0 - 6 which represents (Sunday - Saturday) 
alert(days[29]); 

ve gününü biliyorum hafta da.

+0

teşekkür Jeremy için – Paul

1

İşte o ayın son günü belirlemek için her ayı boyunca devam edecek bir loopp bu. Javascript Date nesnesi, sıfırdan başlayan ayları endeksler ve günü sıfır olarak ayarlarsanız önceki ayın son gününe döner.

Date (2012,0,0) 2012 anlamaya 31,2011

ve tüm önemli bir Ara dönecektir Ara 31 dönecektir Şubat

Date(2012, 12, 0) için artık yıl son gün belirlenmesi için Handy

ile Şubat ayıdır Date (2012,3,0) bu yıl artık yılda beri Feb 29 döndürür

var mos=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'] 

for (i = 0; i < 12; i++) { 
    var lastDate = new Date(2012, i+1, 0); 
    $('body').append('Last day of ' + mos[i] + ' is ' + lastDate.getDate()+'<br>') 
} 

DEMO: http://jsfiddle.net/5k8sn/1/

+0

Cevabınız için teşekkürler charlietfl! – Paul

1

İstediğiniz işlevi jQuery datepicker kullanarak uyguladım.

iki işleve

İşte
$("#datepicker").datepicker({ 

    // only enable date if dateEnabled returns [true] 
    beforeShowDay: dateEnabled, 

    // once a date has been selected call dateSelected 
    onSelect: dateSelected 
}); 

ile

Birincisi, bir diziye

// format yyyy-mm-dd 
var disabledDates = [ 
    "2012-10-01", 
    "2012-10-02", 
    "2012-10-30", 
    "2012-09-12" 
]; 

İkinci devre dışı bırakılması arka ofis seçilen tüm tarihleri ​​ekleyin belirtmek datepicker gerekli tanımıdır işlevler

function dateEnabled(d) { 

    // if date found in array disable date 
    if(disabledDates.indexOf(getDate(d)) > -1) { 

     return [false]; 

    } else { 

     return [true] ; 

    } 
} 

Tarihlerle karşılaştırmak için tarihi dize dönüştürme dizinin

function getDate(d) { 
    var day, 
     month, 
     year; 

    day = d.getDate(); 
    month = d.getMonth() + 1; // add 1 as getMonth returns 0 - 11 
    year = d.getFullYear(); 

    if(month < 10) month = "0" + month; 
    if(day < 10) day = "0" + day; 
    return year + "-" + month + "-" + day; 
} 

bir tarih süreci seçildikten sonra o İşte

function dateSelected(d) { 
    // do stuff with string representation of date           
} 

http://jsfiddle.net/KYzaR/7/

Sadece Array.indexOf ECMA bir son ektir belirtmekte yarar olacağını düşündüğümüz bir keman olduğunu -262 standart ve böylece IE7 ve IE8 durumunda desteklenmez. Aşağıdaki MDN sayfası "Bugünlerde bulmak" yok ya "bu gün gelmiş" gerçekten ne anlama geldiğini bu tarayıcılar https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

+0

çok teşekkürler Bruno, tam olarak aradığım şey bu! Biz indexOf kullanmıyorsanız ne demek istediğini anlamak için emin değilim – Paul

+0

@Juan Mendes, nasıl yapmalıyız? – Paul

+0

@Juan Mendes tamam, teşekkürler – Paul

İlgili konular