如何使用Java或JavaScript在一個月或一年中顯示日期爲星期五的日期?以Java或JavaScript顯示星期五星期五的月份或年份?
例如,對於2011年12月,代碼將顯示:
- 2011年2月12日
- 2011年9月12日
- 16/12/2011
- 23 /二千零十一分之十二
- 30/12/2011
如何使用Java或JavaScript在一個月或一年中顯示日期爲星期五的日期?以Java或JavaScript顯示星期五星期五的月份或年份?
例如,對於2011年12月,代碼將顯示:
類似如下:
new SimpleDateFormat("yyyy-MM-dd EEEE", Locale.US).format(date));
例如用於月,19它打印: 2011-12-19 Monday
如果我沒有弄錯,他想知道12月的所有星期五。不是特定日期的那一天。 – Termi 2011-12-20 10:26:43
在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);
在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;
// .....
}
}
哦,拜託,至少是你應該開始在一個時間向前擡至7天一次,你已經打了第一個星期五...... – Alnitak 2011-12-20 10:29:12
非常感謝... :-) – 2011-12-20 10:33:57
如果我想去每年... – 2011-12-20 10:35:14
在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;
}
感謝塞爾瓦庫瑪... :-) – 2011-12-20 11:51:08
哦親愛的 - 'a = new Array()'_and_'a [i ++] = n' ?!它應該是一個'= []'和'a.push(N)'...只是說 – Alnitak 2011-12-20 13:59:28
這裏是我的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());
}
}
我覺得這個代碼將產生重複,然後左右行軍月/開始的結束。 – Alnitak 2011-12-20 10:44:42
哦,你是對的 - 我得到了3月2日2007年兩次出現。嗯。 – 2011-12-20 11:10:37
好的,修好了。好點。 – 2011-12-20 11:12:47
定義這個功能:
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天的任何內容是否有效(對於半個月)。如果您使用它,您可能需要改進第二個功能。
這是我最佳的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倍,並且合併結果;-)
這不行,男人。 http://jsfiddle.net/h9kmV/ – 2011-12-20 10:55:31
現在工作 - 當我從控制檯更改。登錄到使用數組我忘了我一直在將同一個Date對象反覆推向數組。 – Alnitak 2011-12-20 10:58:02
這是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);
}
[Java](http://stackoverflow.com/tags/java/info)**或** [JavaScript](http://stackoverflow.com/tags/javascript/info )?他們都是非常不同的東西。 – Matt 2011-12-20 10:18:33
什麼都行。 – 2011-12-20 10:19:51
我很難相信。 – Matt 2011-12-20 10:20:19