我同事出了道難題給我,求求這裡的高手們幫幫忙!因為一些原因,我們的系統強迫我們只能前端作業,
所以需要JS的幫忙。大致的需求如下:
一個函式 輸入為兩個時間字串"2009-10-20 07:00","2009-11-15 20:00"要想辦法算出相差的日數、小時數、分鐘數就像 請假"6日5小時45分鐘"//到這裡都還好但是中間要扣掉上班時間以外的時數,這好難!包含上下班設定、及周六日判定;以下是我目前實驗的進度:<script language="JavaScript">
alert("!!!");
function date_Validation(date1, date2) {
alert("!!!");alert(new date());
comptime(pTS(date1),"09:00")!=-1)alert("早於上班時間~~~~");
if(comptime(pTS(date2),"18:30")!=1)alert("晚於~~~~~~~");
return "";
}function comptime(a, b) {
alert("!!!");
var dateA = new Date("1900/1/1 " + a);
var dateB = new Date("1900/1/1 " + b);
if (isNaN(dateA) || isNaN(dateB)) return null;
if (dateA > dateB) return 1;
if (dateA < dateB) return -1;
return 0;
}
//pTS => processTimeString
function pTS(date) {
var TIME1 = date.substr(11, 5);
alert(TIME1);
return TIME1;
}
function processDateString(date) {
var Date1 = date.substr(0,10);
}
var str = date_Validation("2008-10-09 08:30", "2008-10-20 19:00"); </script>
<script language="JavaScript">
<!--
function date_Validation(date1, date2) {
//alert("!!!");
//alert(date1+date2);
var idays,aYear,aMonth,aDay,bYear,bMonth,bDay;
aYear = date1.substr(0,4);
aMonth = date1.substr(5,2);
aDay = date1.substr(8,2);
aHour = date1.substr(11,2);
aMin = date1.substr(14,2);
bYear = date2.substr(0,4);
bMonth = date2.substr(5,2);
bDay = date2.substr(8,2);
bHour = date2.substr(11,2);
bMin = date2.substr(14,2);
var dt1 = new Date(aYear,aMonth-1,aDay,aHour,aMin);
var dt2 = new Date(bYear,bMonth-1,bDay,bHour,bMin);
var dt3 = dt2;
var dc1 = Math.round(((dt2-dt1)/86400000));
var dc2 = dt2-dt1;
var dayCount = 0;
alert(dt2);
alert(dc1);
alert(dc2.getDay());
alert(dt3.toString());
while(dc1>0)
{
dayCount = dayCount + 1;
dc1 = dc1 - 1;
}
alert(dayCount);
/*******************************************************
while(dc2>=86400000)
{
if (dt3.getDay()==0 || dt3.getDay()==6)
{
dc2 -= 86400000;
}
else
{
dc2 -= 86400000;
datCount += 1;
}
}
var Int_aDay,Int_bDay;
Int_aDay = parseInt(aMonth+aDay,10);
Int_bDay = parseInt(bMonth+bDay,10);
//alert(Int_aDay+Int_bDay);
var dt = new Date();
alert(dt.getDay());
if (dt.getDay()==0 || dt.getDay()==6)
//if(Int_bDay>Int_aDay)
***********************************************************/
return "";
}var str = date_Validation("2008-03-01 08:30", "2008-05-09 19:00");
//-->
</script>
所以需要JS的幫忙。大致的需求如下:
一個函式 輸入為兩個時間字串"2009-10-20 07:00","2009-11-15 20:00"要想辦法算出相差的日數、小時數、分鐘數就像 請假"6日5小時45分鐘"//到這裡都還好但是中間要扣掉上班時間以外的時數,這好難!包含上下班設定、及周六日判定;以下是我目前實驗的進度:<script language="JavaScript">
alert("!!!");
function date_Validation(date1, date2) {
alert("!!!");alert(new date());
comptime(pTS(date1),"09:00")!=-1)alert("早於上班時間~~~~");
if(comptime(pTS(date2),"18:30")!=1)alert("晚於~~~~~~~");
return "";
}function comptime(a, b) {
alert("!!!");
var dateA = new Date("1900/1/1 " + a);
var dateB = new Date("1900/1/1 " + b);
if (isNaN(dateA) || isNaN(dateB)) return null;
if (dateA > dateB) return 1;
if (dateA < dateB) return -1;
return 0;
}
//pTS => processTimeString
function pTS(date) {
var TIME1 = date.substr(11, 5);
alert(TIME1);
return TIME1;
}
function processDateString(date) {
var Date1 = date.substr(0,10);
}
var str = date_Validation("2008-10-09 08:30", "2008-10-20 19:00"); </script>
<script language="JavaScript">
<!--
function date_Validation(date1, date2) {
//alert("!!!");
//alert(date1+date2);
var idays,aYear,aMonth,aDay,bYear,bMonth,bDay;
aYear = date1.substr(0,4);
aMonth = date1.substr(5,2);
aDay = date1.substr(8,2);
aHour = date1.substr(11,2);
aMin = date1.substr(14,2);
bYear = date2.substr(0,4);
bMonth = date2.substr(5,2);
bDay = date2.substr(8,2);
bHour = date2.substr(11,2);
bMin = date2.substr(14,2);
var dt1 = new Date(aYear,aMonth-1,aDay,aHour,aMin);
var dt2 = new Date(bYear,bMonth-1,bDay,bHour,bMin);
var dt3 = dt2;
var dc1 = Math.round(((dt2-dt1)/86400000));
var dc2 = dt2-dt1;
var dayCount = 0;
alert(dt2);
alert(dc1);
alert(dc2.getDay());
alert(dt3.toString());
while(dc1>0)
{
dayCount = dayCount + 1;
dc1 = dc1 - 1;
}
alert(dayCount);
/*******************************************************
while(dc2>=86400000)
{
if (dt3.getDay()==0 || dt3.getDay()==6)
{
dc2 -= 86400000;
}
else
{
dc2 -= 86400000;
datCount += 1;
}
}
var Int_aDay,Int_bDay;
Int_aDay = parseInt(aMonth+aDay,10);
Int_bDay = parseInt(bMonth+bDay,10);
//alert(Int_aDay+Int_bDay);
var dt = new Date();
alert(dt.getDay());
if (dt.getDay()==0 || dt.getDay()==6)
//if(Int_bDay>Int_aDay)
***********************************************************/
return "";
}var str = date_Validation("2008-03-01 08:30", "2008-05-09 19:00");
//-->
</script>
一改再改
MSNStatus "逼勒~一直改~ 我要一個浮點數日期計算->要算成N日N時N分->分三個資料欄位->.......";
永遠寫不完,老闆回到辦公室,一定會問我:[怎嚜那嚜慢!]
我真想補我旁邊那個人一刀!
正常的溝通方式不是應該先真誠的感謝,然後想清楚要什麼再提出改進嗎?
牢騷發完自PO答案(時間的部份沒有帶回來):
<html>
<head>
<script language="JavaScript">
<!-- function compdate(st1,ed1){
alert("!!!");
var st,ed,aaa,bbb,st2;
aaa = st1.split("-");//alert(aaa);
bbb = ed1.split("-");//alert(bbb);
st = new Date(aaa[0],(aaa[1]-1),aaa[2],"00","00","00"); //alert(st);
ed = new Date(bbb[0],(bbb[1]-1),bbb[2],"00","00","00"); //alert(ed);
var tmp = 86400000;
var days = Math.round((ed.getTime() - st.getTime())/tmp);alert(days); //相隔的天数
var workDays= 0;//工作日
var holiday = new Array("10-21","10-03","10-02"); //alert(holiday);//自行添加假日
var uuu = new Array("日","一","二","三","四","五","六");
for(var i =1;i<=days;i++)
{
//alert(i);
st2 =new Date();
st2.setTime(st.getTime()+tmp*i); // i 天以后的日期
//alert(st2);
alert(uuu[st2.getDay()]);
if(st2.getDay()!=0 && st2.getDay()!=6) //不是周六、周日
{
var str = (st2.getMonth()+1)+"-"+st.getDate();
if(holiday.toString().indexOf(str) < 0) //不是自定义的假日
{
//alert(str);
workDays++;
}
}
}
alert(workDays);
return workDays;//返回工作日
}
//http://www.w3schools.com/jS/tryit.asp?filename=tryjs_timing_clock
compdate("2009-10-15","2009-10-20");
-->
</script>
</head>
<body>
</body>
</html>