/*
@author seave
@sincee 2006-03-24
*根据输入的一天,日期格式为yyyy-mm-dd,得到本周开始时间,和本周结束时间,
本周的界定为:星期日、星期一、...、星期六,即星期日为本周的第一天,星期六为本周的最后一天
本周的开始时间为:星期一
本周的结束时间为:星期五
*/
function getDateInfo(dataInfo)
{
//获取选择的时间,日期格式为yyyy-mm-dd
var dataInfo = window.document.forms[0].selectDate.value;
if(dataInfo == '')
{
alert("请先选择日期!");
return;
}
//解析输入的时间
var year = dataInfo.substring(0,4);
var month;
var day = dataInfo.substring(8,10);
if(dataInfo.substring(5,6) == 0)
{
month = dataInfo.substring(6,7);
}
else
{
month = dataInfo.substring(5,7);
}
//创建日期对象
var date = new Date(year,month-1,day);
var weekYear = date.getFullYear();
var weekMonth = date.getMonth() + 1;
//获取当前月的总天数
var nowTotalDays = parseDays(weekYear,weekMonth);
var beginWeekDay;
var endWeekDay;
var beginWeekDate;
var endWeekDate
//开始和结束时间可能跨月,开始时间跨前一月,结束时间靠后一月
//组织本周开始时间
if((date.getDate() - date.getDay()) < 0)
{
//开始时间跨前一月
var tempCount = date.getDay() - date.getDate();
//获取上月的总天数
var lastMonth = weekMonth-1;
var lastTotalDays;
if(lastMonth == 0)
{
//开始时间跨上一年
var lastYear = weekYear -1;
var lastYearMonth = 12;
lastTotalDays = parseDays(lastYear,lastYearMonth-1);
beginWeekDay = lastTotalDays - (date.getDay() - date.getDate()) + 1;
beginWeekDate = lastYear + "-" + parseFormatTwo(lastYearMonth) + "-" + parseFormatTwo(beginWeekDay);
}
else
{
//开始时间没有跨年
lastTotalDays = parseDays(weekYear,lastMonth-1);
beginWeekDay = lastTotalDays - (date.getDay() - date.getDate()) + 1;
beginWeekDate = weekYear + "-" + parseFormatTwo(lastMonth) + "-" + parseFormatTwo(beginWeekDay);
}
}
else if((date.getDay() == 0) && (date.getDate() == parseDays(weekYear,weekMonth-1)))
{
//开始时间跨下一月
//当月的最后一日为星期天
beginWeekDay = 1;
var nextMonth = weekMonth + 1;
if(nextMonth == 13)
{
//开始时间跨下一年
var nextYear = weekYear + 1;
var nextYearMonth = 1;
beginWeekDate = nextYear + "-" + parseFormatTwo(nextYearMonth) + "-" + parseFormatTwo(beginWeekDay);
}
else
{
beginWeekDate = weekYear + "-" + parseFormatTwo(nextMonth) + "-" + parseFormatTwo(beginWeekDay);
}
}
else
{
beginWeekDay = date.getDate() - date.getDay() + 1;
beginWeekDate = weekYear + "-" + parseFormatTwo(weekMonth) + "-" + parseFormatTwo(beginWeekDay);
}
//组织本周结束时间
if((date.getDate() - date.getDay() + 5) == 0)
{
//结束时间跨上一月
//当月的第一日为星期六的情况
var lastMonth = weekMonth-1;
var lastTotalDays;
if(lastMonth == 0)
{
//结束时间跨上一年
var lastYear = weekYear -1;
var lastYearMonth = 12;
//lastTotalDays = parseDays(lastYear,lastYearMonth-1);
endWeekDay = parseDays(lastYear,lastYearMonth-1);;
endWeekDate = lastYear + "-" + parseFormatTwo(lastYearMonth) + "-" + parseFormatTwo(endWeekDay);
}
else
{
//lastTotalDays = parseDays(weekYear,lastMonth-1);
//结束时间未跨年
endWeekDay = parseDays(weekYear,lastMonth-1);
endWeekDate = weekYear + "-" + parseFormatTwo(lastMonth) + "-" + parseFormatTwo(endWeekDay);
}
}
else if(((date.getDate() - date.getDay() + 5) - parseDays(weekYear,weekMonth-1)) > 0)
{
//结束时间跨下一月
var nextMonth = weekMonth + 1;
if(nextMonth == 13)
{
//结束时间跨下一年
var nextYear = weekYear + 1;
var nextYearMonth = 1;
endWeekDay = (date.getDate() - date.getDay() + 5) - parseDays(weekYear,weekMonth-1);
endWeekDate = nextYear + "-" + parseFormatTwo(nextYearMonth) + "-" + parseFormatTwo(endWeekDay);
}
else
{
//结束时间跨下一个月,但不跨下一年
endWeekDay = (date.getDate() - date.getDay() + 5) - parseDays(weekYear,weekMonth-1);
endWeekDate = weekYear + "-" + parseFormatTwo(nextMonth) + "-" + parseFormatTwo(endWeekDay);
}
}
else
{
endWeekDay = date.getDate() - date.getDay() + 5
//组织开始时间和结束时间
endWeekDate = weekYear + "-" + parseFormatTwo(weekMonth) + "-" + parseFormatTwo(endWeekDay);
}
//提供某年某月某日,返回某年的第几周
var weekofYear = weekOfYear(weekYear,weekMonth,day);
//组织顺序周数
//var weeks = weekYear + "" + parseFormatTwo(weekofYear);
window.document.forms[0].begindate.value = beginWeekDate;
window.document.forms[0].enddate.value = endWeekDate;
window.document.forms[0].cwweekoder.value = weekofYear;
window.document.forms[0].selectDate.value = dataInfo;
//alert("new beginWeekDate = " + beginWeekDate);
//alert("old endWeekDate = " + endWeekDate);
window.document.forms[0].action = "com.sdpcpa.oa.workstatics.CenWorkActionLet";
window.document.forms[0].target = "_self";
window.document.forms[0].method = "GET";
window.document.forms[0].submit();
return;
}
//返回国历 y年某m+1月的天数
function parseDays(y,m)
{
if(m==1)
{
//判断是否润年
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28)
}
else
{
if(m == 3 || m == 5 || m == 8 || m == 10)
{
//月小
return 30;
}
else
{
//月大
return 31;
}
}
}
/*
格式化时间字符串
月和日不足两位,在前面补0
*/
function parseFormatTwo(str)
{
if(str != undefined)
{
if(str > 9)
{
return str;
}
else
{
return "0"+str;
}
}
}
/*
输入年、月、日
根据当前年的1.1判断当前日为第几周
一周的时间范围从,星期日、星期一、星期二、...、星期六
如果当年的最后一个月最后一周,不足七天,则计算到下一年的第一月
*/
function weekOfYear(year, month, day)
{
var beginDate = new Date(year, 0, 1);
var endDate = new Date(year, month-1, day);
var dayMS = 24*60*60*1000; //毫秒
var firstDay = (6-beginDate.getDay())*dayMS;
var weekMS = 7*dayMS;
var beginTime = beginDate.getTime();
var endTime = endDate.getTime();
var week = Math.ceil((endTime-beginTime-firstDay)/weekMS)+1;
var endMonth = endDate.getMonth();
var endDay = endDate.getDate();
var endWeekDay = (endDate.getDate() - endDate.getDay() + 5) - 31
if(endMonth == 11 && endWeekDay > 0)
{
//当年的最后一个月的最后一周要跨月的情况
week = 1;
year = year + 1;
}
return year + "" + parseFormatTwo(week);
}
附图:
解决方案:点选择日期,出现一个时期控件,再点更新,可以根据输入的时间自动计算出周报开始时间和周报的结束时间,以及顺序周数,相应的计算规则见程序头上的说明文档。