工作中碰到一个需求,知道一个js字符串“2008-10-31”,得到这个日期所在周及其上一周的第一天和最后一天。
值得一提的是关于周的问题,西方的周的第一天是周日,最后一天是周六。而对于中国来说,习惯上的周的第一天是周一,最后一天是周日。比如说“2008-10-31”按西方来说第一天是:2008-10-26周日,最后一天是“2008-11-01”周六,而我工作中所要用到的周是“中国式”的,第一天是2008-10-27周一,最后一天是2008-11-02周日。
方法如下:
1.编写日期处理函数
2.编写格式化函数,以把得到的日期类型的数字转化成可以自己需要的字符串
3.处理字符串,以使其转换成js的日期类型。
4.调用测试
值得一提的是关于周的问题,西方的周的第一天是周日,最后一天是周六。而对于中国来说,习惯上的周的第一天是周一,最后一天是周日。比如说“2008-10-31”按西方来说第一天是:2008-10-26周日,最后一天是“2008-11-01”周六,而我工作中所要用到的周是“中国式”的,第一天是2008-10-27周一,最后一天是2008-11-02周日。
方法如下:
1.编写日期处理函数
//得到每周的第一天(周一)
function getFirstDateOfWeek(theDate){
var firstDateOfWeek;
theDate.setDate(theDate.getDate() + 1 - theDate.getDay());
firstDateOfWeek = theDate;
return firstDateOfWeek;
}
//得到每周的最后一天(周日)
function getLastDateOfWeek(theDate){
var lastDateOfWeek;
theDate.setDate(theDate.getDate() +7 - theDate.getDay());
lastDateOfWeek = theDate;
return lastDateOfWeek;
}
//得到上周的第一天(周一)
function getPreviousFirstDateOfWeek(theDate){
var firstDateOfWeek;
theDate.setDate(theDate.getDate() - 6 - theDate.getDay());
firstDateOfWeek = theDate;
return firstDateOfWeek;
}
//得到上周的最后一天(周日)
function getPreviousLastDateOfWeek(theDate){
var lastDateOfWeek;
theDate.setDate(theDate.getDate() +7 - theDate.getDay());
lastDateOfWeek = theDate;
return lastDateOfWeek;
}
2.编写格式化函数,以把得到的日期类型的数字转化成可以自己需要的字符串
//把时间类型的数字转换为各种需要的字符串
function MM_dateFormat(rq,fenge) {
//格式化日期显示
//fenge = 0 :2006-02-28 12:34:23
//fenge = 1 :2006-02-28
//fenge = 2 :2006年2月28日
//fenge = 3 :2月28日
//fenge = 4 :28/2
//fenge = 5 :二○○六年二月二十八日
//fenge = 6 :12:34:23
//fenge = 7 :20060228
if ((fenge==null)||(fenge=="")) fenge = 0;
if ((rq =="")||(rq ==null)) var tmpDate = new Date(); else var tmpDate = new Date(rq);
var result = "";
switch(fenge) {
case 1:
result += tmpDate.getFullYear()+"-";
if ((tmpDate.getMonth()+1)<10) result += "0"+(tmpDate.getMonth()+1)+"-"; else result += (tmpDate.getMonth()+1)+"-";
if (tmpDate.getDate()<10) result += "0"+tmpDate.getDate(); else result += tmpDate.getDate();
break;
case 2:
result = tmpDate.getFullYear()+"年"+(tmpDate.getMonth()+1)+"月"+tmpDate.getDate()+"日";
break;
case 3:
result = (tmpDate.getMonth()+1)+"月"+tmpDate.getDate()+"日";
break;
case 4:
result = tmpDate.getDate()+"/"+(tmpDate.getMonth()+1);
break;
case 5:
var zhifu= "○一二三四五六七八九十";
var zhrq ="";
var nan = String(tmpDate.getFullYear());
for (iii=0;iii<nan.length;iii++) { zhrq += zhifu.substr(nan.substr(iii,1),1); }
zhrq += "年";
var nan = String(tmpDate.getMonth()+1);
if (nan.length == 2) {
if (nan.substr(0,1)=="1") zhrq += "十"; else zhrq += zhifu.substr(nan.substr(0,1),1)+"十";
if (nan.substr(1,1)=="0") zhrq += "月"; else zhrq += zhifu.substr(nan.substr(1,1),1)+"月"
} else {
zhrq += zhifu.substr(nan.substr(0,1),1)+"月";
}
var nan = String(tmpDate.getDate());
if (nan.length == 2) {
if (nan.substr(0,1)=="1") zhrq += "十"; else zhrq += zhifu.substr(nan.substr(0,1),1)+"十";
if (nan.substr(1,1)=="0") zhrq += "日"; else zhrq += zhifu.substr(nan.substr(1,1),1)+"日"
} else {
zhrq += zhifu.substr(nan.substr(0,1),1)+"日";
}
result = zhrq;
break;
case 6:
if (tmpDate.getHours()<10) result += "0"+tmpDate.getHours(); else result += ""+ tmpDate.getHours();
if (tmpDate.getMinutes()<10) result += ":0"+tmpDate.getMinutes(); else result += ":"+ tmpDate.getMinutes();
if (tmpDate.getSeconds()<10) result += ":0"+tmpDate.getSeconds(); else result += ":"+ tmpDate.getSeconds();
break;
case 7:
result += tmpDate.getFullYear();
if ((tmpDate.getMonth()+1)<10) result += "0"+(tmpDate.getMonth()+1); else result += (tmpDate.getMonth()+1);
if (tmpDate.getDate()<10) result += "0"+tmpDate.getDate(); else result += tmpDate.getDate();
break;
default:
result += tmpDate.getFullYear()+"-";
if ((tmpDate.getMonth()+1)<10) result += "0"+(tmpDate.getMonth()+1)+"-"; else result += (tmpDate.getMonth()+1)+"-";
if (tmpDate.getDate()<10) result += "0"+tmpDate.getDate(); else result += tmpDate.getDate();
if (tmpDate.getHours()<10) result += " 0"+tmpDate.getHours(); else result += " "+ tmpDate.getHours();
if (tmpDate.getMinutes()<10) result += ":0"+tmpDate.getMinutes(); else result += ":"+ tmpDate.getMinutes();
if (tmpDate.getSeconds()<10) result += ":0"+tmpDate.getSeconds(); else result += ":"+ tmpDate.getSeconds();
break;
}
return result
}
3.处理字符串,以使其转换成js的日期类型。
//取得处理字符串,然后转换成日期类型。
var s = "2008-02-15";
s = s+" 00:00:00";
var tD = new Date(Date.parse(s.replace(/-/g, "/")));
4.调用测试
//得到上周的第一天以及最后一天。
var lWeekFirstDay = getPreviousFirstDateOfWeek(tD).toLocaleString();
var lWeekLastDay = getPreviousLastDateOfWeek(tD).toLocaleString();
var ch2 = MM_dateFormat(lWeekFirstDay,7);
var ch3 = MM_dateFormat(lWeekLastDay,7);
alert("上周一的时间是:" + ch2);
alert("上周日的时间是:" + ch3 );
//得到本周的第一天以及最后一天。
var nWeekFirstDay = getFirstDateOfWeek(tD).toLocaleString();
var nWeekLastDay= getLastDateOfWeek(tD).toLocaleString();
var ch = MM_dateFormat(nWeekFirstDay,7);
var ch1 = MM_dateFormat(nWeekLastDay,7);
alert("本周一的时间是:" + ch);
alert("本周日的时间是:" + ch1);