2011-12-20 69 views
1

如何使用Java或JavaScript在一個月或一年中顯示日期爲星期五的日期?以Java或JavaScript顯示星期五星期五的月份或年份?

例如,對於2011年12月,代碼將顯示:

  • 2011年2月12日
  • 2011年9月12日
  • 16/12/2011
  • 23 /二千零十一分之十二
  • 30/12/2011
+5

[Java](http://stackoverflow.com/tags/java/info)**或** [JavaScript](http://stackoverflow.com/tags/javascript/info )?他們都是非常不同的東西。 – Matt 2011-12-20 10:18:33

+0

什麼都行。 – 2011-12-20 10:19:51

+3

我很難相信。 – Matt 2011-12-20 10:20:19

回答

0

類似如下:

new SimpleDateFormat("yyyy-MM-dd EEEE", Locale.US).format(date));

例如用於月,19它打印: 2011-12-19 Monday

+3

如果我沒有弄錯,他想知道12月的所有星期五。不是特定日期的那一天。 – Termi 2011-12-20 10:26:43

0

在java中可以使用的java.util.Calendar類。

Calendar c = Calendar.newInstance(); 
c.setTime(System.currentTimeInMills()); 
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { 
    .. do your stuff here 
} 

你也可以遍歷天:

Calendar c = Calendar.newInstance(); 
c.add(1, Calendar.DAY); 
1

在Java:

for (int i = 1; i <= 31; i++) { 
    Calendar cal = new GregorianCalendar(2011, Calendar.DECEMBER, i); 
    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { 
     // process date 
    } 
} 

在Javascript中:

for (i = 1; i <= 31; i++) { 
    var date = new Date(2011, 11, i); 
    if (date.getDay() == 5) { 
     // process date 
    } 
} 

編輯:

一個響應跳躍到評論的簡單的邏輯:

int step = 1; 
for (int i = 1; i <= 31; i += step) { 
    // ... 
    if (.....) { 
     step = 7; 
     // ..... 
    } 
} 
+2

哦,拜託,至少是你應該開始在一個時間向前擡至7天一次,你已經打了第一個星期五...... – Alnitak 2011-12-20 10:29:12

+0

非常感謝... :-) – 2011-12-20 10:33:57

+0

如果我想去每年... – 2011-12-20 10:35:14

1

在Javascript中,

function getFridays(year,month){ 
    var fridays=new Array(); 
    var i=0; 
     var tdays=new Date(year, month, 0).getDate(); 
     for(date=0;date<=tdays;date++)  { 
      sdate=(date<10)?"0"+date:date; 
      dd=(month+1)+"/"+sdate+"/"+year; 
      var day=new Date(year,month,date); 
      if(day.getDay() == 5) 
      { 
       fridays[i++]=dd; 
      }  
     } 
     return fridays; 
    } 
+0

感謝塞爾瓦庫瑪... :-) – 2011-12-20 11:51:08

+0

哦親愛的 - 'a = new Array()'_and_'a [i ++] = n' ?!它應該是一個'= []'和'a.push(N)'...只是說 – Alnitak 2011-12-20 13:59:28

0

這裏是我的JavaScript的嘗試。我懷疑這是效率極其低下的,你必須提供一個月的JavaScript預期的方式,即一月份爲0,十二月份爲11

function showFridays(year, month) { 
    var dates = []; 

    var months = []; 

    if(!month){ 
     for(var i=0; i<12; i++) { 
      months.push(i); 
     } 
    } 
    else { 
     months.push(month); 
    } 

    for(var i=0; i<months.length; i++){ 
     var month_number = months[i]; 

     for(var j=1; j<32; j++) { 
      var date = new Date(year, month_number, j) 

       // Because e.g. new Date(2011,2,31) will evaluate to 3rd March, check that date.getMonth() returns the same number as we passed in, so that we reject duplicate dates. 

      if(date.getDay() == 5 && date.getMonth() == month_number) { 
       dates.push(date); 
      } 
     } 
    } 

    for(var i=0; i<dates.length; i++) { 
     console.log(dates[i].toLocaleString()); 
    } 
} 
+0

我覺得這個代碼將產生重複,然後左右行軍月/開始的結束。 – Alnitak 2011-12-20 10:44:42

+0

哦,你是對的 - 我得到了3月2日2007年兩次出現。嗯。 – 2011-12-20 11:10:37

+0

好的,修好了。好點。 – 2011-12-20 11:12:47

0

定義這個功能:

function getFridays(month, year){ 
    var ret = []; 
    for(var i = 1; i <= 31; i++){ 
     var date = new Date(); 
     date.setDate(i); 
     date.setMonth(month - 1); 
     date.setFullYear(year); 
     if(date.getDay() === 5){ 
      var today = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear(); 
      ret.push(today); 

     } 
    } 
    return ret; 
} 

然後調用它,說20年12這樣的:

document.write(getFridays(12, 2011)); 

有你有一個的JavaScript解決方案。

Demo


編輯:根據對另一種解決方案評論更新邏輯:

function getFridays(month, year){ 
    var ret = []; 
    for(var i = 1; i <= 7; i++){ 
     var date = new Date(); 
     date.setDate(i); 
     date.setMonth(month - 1); 
     date.setFullYear(year); 
     if(date.getDay() === 5){ 
      var today = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear(); 
      ret.push(today); 
      for(var j = 1; j < 5; j++){ 
       var d = date.getDate() + j * 7; 
       if(d <= 31){ 
        ret.push((d) + '/' + (date.getMonth() + 1) + '/' + date.getFullYear()); 
       } 
      } 
     } 
    } 
    return ret; 
} 

基本上,這確實是什麼,它看起來這個月的第一個星期五,然後簡單地添加其他星期五給他們加7,直到你出去的月份。請注意,我沒有添加任何邏輯來檢查小於31天的任何內容是否有效(對於半個月)。如果您使用它,您可能需要改進第二個功能。

4

這是我最佳的Javascript嘗試。

它通過算法確定每月的第一個星期五的日期是什麼,然後簡單地前進7天時間,直到本月結束。

// find all dates that fall on a particular day of the week 
// for the given year and month 

function getDaysOfMonth(year, month, dow) { 
    --month;         // to correct for JS date functions 
    var d = new Date(year, month, 1);   // get the first of the month 
    var dow_first = d.getDay();     // find out what DoW that was 
    var date = (7 + dow - dow_first) % 7 + 1; // and the first day matching dow 

    var dates = []; 
    d.setDate(date); 
    do { 
     dates.push(new Date(d));  // store a copy of that date 
     date += 7;     // go forward a week 
     d.setDate(date);    
    } while (d.getMonth() === month); // until the end of the month 

    return dates; 
} 

演示,對週五(即5天JS格式):

document.write(getDaysOfMonth(2011, 12, 5).join("<br>")); 

完全工作演示中看到http://jsfiddle.net/wLFmM/

要得到的日期整整一年,只是把它的12倍,並且合併結果;-)

+0

這不行,男人。 http://jsfiddle.net/h9kmV/ – 2011-12-20 10:55:31

+0

現在工作 - 當我從控制檯更改。登錄到使用數組我忘了我一直在將同一個Date對象反覆推向數組。 – Alnitak 2011-12-20 10:58:02

0

這是Java中的例子,適用於2011年12月更改日期的月份,以適應您的使用案例:

Calendar beginCalendar = Calendar.getInstance();   
//initialize the date to the first day the desired year and month 
//Below example initializes to 1st of December 2011 
beginCalendar.set(2011,Calendar.DECEMBER,1);    
Calendar endCalendar = Calendar.getInstance(); 
//set the end date to the end of the month using the begin date 
endCalendar.set(beginCalendar.get(Calendar.YEAR),beginCalendar.get(Calendar.MONTH),beginCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 

//loop through till we hit the first friday of the month 
while(beginCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.FRIDAY){ 
    beginCalendar.add(Calendar.DATE,1);    
} 

//loop from the first friday of the month till the end of month and add 1 week in each iteration. 
while (beginCalendar.compareTo(endCalendar) <= 0) {    
    System.out.println(beginCalendar.getTime().toString());//this prints all the fridays in the given month 
    beginCalendar.add(Calendar.WEEK_OF_YEAR, 1);     
} 
相關問題