请假系统中的时间差,单位是小时,开始结束的:年月日 、小时、 分钟都是从页面上输入的,上班小时是8:30-17:30
其中分钟是个下拉菜单只有00或30两个值。考虑到周六日的情况,高手帮忙解决下谢谢我写了写代码但不是很理想,求高手给个简单的JS
其中分钟是个下拉菜单只有00或30两个值。考虑到周六日的情况,高手帮忙解决下谢谢我写了写代码但不是很理想,求高手给个简单的JS
解决方案 »
- 这个难题,外国的问答站不细致深入了解其中含义,就关闭了,像国内精英请教吧
- 一个页面上要用到3个以上的JS图片切换效果怎么做?
- firefox下div无法隐藏,IE下正常。有何解决办法?
- 鼠标离开时候换另外一张图的js代码?
- javascript 处理字符串颜色问题
- 求firefox下跨框架下拉菜单的解决方案?
- document.referrer的问题
- 谁能介绍一下getElementById的详细用法吗?
- 能否改变用 javascript 的 alert 函数弹出的对话框中的图标?!(在线等待)
- 200 分悬赏
- jquery live问题
- jquery click()和change()有什么区别
{
var objInterval = {'D' : 1000 * 60 * 60 * 24, 'H' : 1000 * 60 * 60, 'M' : 1000 * 60, 'S' : 1000, 'T' : 1};
interval = interval.toUpperCase();
var dt1 = Date.parse(date1.replace(/-/g, '/'));
var dt2 = Date.parse(date2.replace(/-/g, '/'));
try
{
return Math.round((dt2 - dt1) / eval('(objInterval.' + interval + ')'));
}
catch (e)
{
return e.message;
}
}说明:interval 取值: d (day), m(minutes), s(second), t(毫秒),不分区大小写
日期格式: yyyy (/-) (m)m (/-) (d)d
使用方式:alert(dateDiff('D', '2007-4-1', '2007/04/19'));
{
var objInterval = {'D' : 1000 * 60 * 60 * 24, 'H' : 1000 * 60 * 60, 'M' : 1000 * 60, 'S' : 1000, 'T' : 1};
interval = interval.toUpperCase();
var dt1 = Date.parse(date1.replace(/-/g, '/'));
var dt2 = Date.parse(date2.replace(/-/g, '/'));
try
{
return Math.round((dt2 - dt1) / eval('(objInterval.' + interval + ')'));
}
catch (e)
{
return e.message;
}
}
function timeDif(date1,date2){
//从date1到date2的时间差,考虑到周末和上班时间
var date1New = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate()); //
var date2New = new Date(date2.getFullYear(),date2.getMonth(),date2.getDate()); //
var date11=new Date(date1New.getTime()-(date1New.getDay()-1)*24*3600*1000); // 更新到本周开始的周一
var date12= new Date(date11.getFullYear(),date11.getMonth(),date11.getDate()); //更新到周一的凌晨
var diffDay =(date2New - date1New)/(24*3600*1000)- Math.floor((date2New - date12)/(24*7*3600*1000))*2; //计算实际缺的工作日
var date2 = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),date2.getHours(),date2.getMinutes()); // 转换到同一天
var dateBeg = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),8,30); //
var dateEnd = new Date(date1.getFullYear(),date1.getMonth(),date1.getDate(),19,30);
var difftime =((date2-dateEnd<0?date2:dateEnd )-(date1-dateBeg>0?date1:dateBeg))/(3600*1000);
return diffDay*(19-8) + difftime;
}
var totaldate = document.getElementById('insForm:totaldate');
var str1 = document.getElementById('insForm:startDateInputDate').value;
var str2 = document.getElementById('insForm:endDateInputDate').value;
var str3 = document.getElementById('insForm:startdateHour').value;
var str4 = document.getElementById('insForm:endDateH').value;
var str5 = document.getElementById('insForm:startdateM').value;
var str6 = document.getElementById('insForm:endDateM').value;
var datetime1 = new Date(), datetime2 = new Date();
datetime1.setFullYear(str1.substr(0, 4), str1.substr(5, 2) - 1, str1
.substr(8, 2));
datetime2.setFullYear(str2.substr(0, 4), str2.substr(5, 2) - 1, str2
.substr(8, 2));
datetime1.setMilliseconds(0);
datetime2.setMilliseconds(0);
var date1 = datetime1.setHours(0, 0, 0);
var date2 = datetime2.setHours(0, 0, 0);
datetime1.setHours(str3, 0, 0);
datetime2.setHours(str4, 0, 0);
var tothours = 0;
if (datetime2.getHours() == 0) {
return "";
} else {
if ((datetime1.getHours() == 8 && str5 == 2)
|| (datetime2.getHours() == 8 && str6 == 2)) {
alert(" shi jian cuo wu!!")
} else {
if (date1 == date2) {
// liang ge dou xiao yu
if ((8 <= datetime1.getHours() < 12)
&& datetime2.getHours() < 12) { if (str5 == 2 && str6 == 2) {
tothours = datetime2.getHours() - datetime1.getHours(); }
if (str5 == 1 && str6 == 2) {
tothours = datetime2.getHours() - datetime1.getHours()
- 0.5; }
if (str5 == 2 && str6 == 1) {
tothours = datetime2.getHours() - datetime1.getHours()
+ 0.5; }
if (str5 == 1 && str6 == 1) {
tothours = datetime2.getHours() - datetime1.getHours(); }
}楼上这是我写的最原始的方法拆分后进行判断,你的方法我试了但是没有达到我想要的效果...我现在已经把不考虑星期天的所有可能都写完了结果也是正确的,但是我觉得这个办法很笨,想问下高手有没有什么好的解决办法....
if ((8 <= datetime1.getHours() < 12)
&& datetime2.getHours() < 12) {if (str5 == 2 && str6 == 2) {
这块写错了。。if里面不是这么写的if(8 <= datetime1.getHours()&&
datetime1.getHours() < 12&& datetime2.getHours() < 12)这样写
......
正确的应该是1
我想,还是用substr做吧