这是一个计算调休时间的表单---表单有开始时间和结束时间,但输入完成时给出总时长,一天算8小时,不足一天的与上班时间及下班时间比较上班9:10下班18:00,中午12-13休息不算在内,但是如果上班中途休息的就需要和上班时间及下班时间比较了!目前写了部分但是有的时间可以有的就是错的求救啊
//上班时间
var startwork=" 09:10:00";
var endwork=" 18:00:00";//下班时间
var endmoon=" 12:00:00";//中午下班时间
var startnoon=" 13:00:00";//下午上班时间
var hour=0;
var days=0;
//获取页面的开始时间及结束时间
var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/")
var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
var startDay=sd.substring(0,sd.length-9);
var endDay=ed.substring(0,ed.length-9);
var hours=0;
var min=0;
var mn=0;
//判断当天是否到达公司
if((new Date(startDay+startwork)).getTime()-staDate.getTime()>0){
//判断时间是否在午休前
hours=0;
}else if((new Date(startDay+endmoon)).getTime()-staDate.getTime()>0){
days=(new Date(startDay+endmoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000));
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
//判断时间是否在下午上班前
}else if((new Date(startDay+startnoon)).getTime()-staDate.getTime()>0){
//判断时间是否在下班后
days=(new Date(startDay+startnoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}else{
days=(new Date(startDay+endwork)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}
alert(hours);
//判断时间开始是否在上班时间
if((new Date(endDay+endwork)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8+8-hours;
}else if((new Date(endDay+startnoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+startnoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-Math.floor(hour)-hours;
}else if((new Date(endDay+endmoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+endmoon)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+endmoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-(Math.floor(hour)+5)-hours;
}else{
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8-hours;
}
alert(hour);
// var dateTim=endDate.getTime()-staDate.getTime();
//var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
$(dialog).find("#hourAmt").val(hour);
//上班时间
var startwork=" 09:10:00";
var endwork=" 18:00:00";//下班时间
var endmoon=" 12:00:00";//中午下班时间
var startnoon=" 13:00:00";//下午上班时间
var hour=0;
var days=0;
//获取页面的开始时间及结束时间
var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/")
var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
var startDay=sd.substring(0,sd.length-9);
var endDay=ed.substring(0,ed.length-9);
var hours=0;
var min=0;
var mn=0;
//判断当天是否到达公司
if((new Date(startDay+startwork)).getTime()-staDate.getTime()>0){
//判断时间是否在午休前
hours=0;
}else if((new Date(startDay+endmoon)).getTime()-staDate.getTime()>0){
days=(new Date(startDay+endmoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000));
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
//判断时间是否在下午上班前
}else if((new Date(startDay+startnoon)).getTime()-staDate.getTime()>0){
//判断时间是否在下班后
days=(new Date(startDay+startnoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}else{
days=(new Date(startDay+endwork)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}
alert(hours);
//判断时间开始是否在上班时间
if((new Date(endDay+endwork)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8+8-hours;
}else if((new Date(endDay+startnoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+startnoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-Math.floor(hour)-hours;
}else if((new Date(endDay+endmoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+endmoon)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+endmoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-(Math.floor(hour)+5)-hours;
}else{
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8-hours;
}
alert(hour);
// var dateTim=endDate.getTime()-staDate.getTime();
//var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
$(dialog).find("#hourAmt").val(hour);
解决方案 »
- 如何用javascript实现压缩本地文件上传服务器的功能?
- JS 如何让页面加载的时候就触发按钮的单击事件?
- 如何在JScript中调用windows media player控件的方法?
- flexigrid怎么添加自定义的行点击事件(单击)
- hibernate问题
- 一个很简单的alert问题,帮忙解决
- 关于Ie6的鼠标指针问题
- 日期计算问题!在上次基础上进行一些修改!
- 如何调用kodakimg或ACDSEE打开tif文档
- 请问我有一幅Flash,方在index.html中,我想让它每次运行时都是全窗口出现,该怎么做?不管是800*600,还是1024*768,就是让flash自动适
- html中table点击显示
- 小试knockout级联
还有,总结一下你的问题,什么样的情况下会出错,给出错误的几个数据样本,便于大家调试。
<div class="form label-80 input-200 w96">
<table class="formTable">
<tr>
<td class="label"><strong>*</strong>申请类型:</td>
<td class="input">
<select id="attendanceTypeCd" name="attendanceTypeCd" validate="{required:true}">
<#list attendanceTypeCds as root>
<option value="${root.valCd}" title="${root.val}">${root.val}</option>
</#list>
</select>
</td>
<td class="label"><strong>*</strong>申请时长:</td>
<td class="input"><input style="width: 80px;" id="hourAmt" name="hourAmt" type="text" readonly="readonly"/>小时</td>
</tr>
<tr>
<td class="label"><strong>*</strong>开始时间:</td>
<td class="input">
<input type="text" readonly="readonly" name="attStaDate" id="attStaDate" class="Wdate div_rl_ri l-text" style="width:100%;"
onFocus="var attEndDate=$dp.$('attEndDate');WdatePicker({isShowClear:false,readOnly:true,dateFmt:'yyyy-MM-dd HH:mm:ss',maxDate:'#F{$dp.$D(\'attEndDate\')}',onpicked:function(){attEndDate.focus();}})"
ltype="date"/>
</td>
<td class="label"><strong>*</strong>结束时间:</td>
<td class="input">
<input type="text" onchange="javascript:attendTab.pickedFunc('#addAttApplyDialog')" readonly="readonly" name="attEndDate" id="attEndDate" class="Wdate div_rl_ri l-text" style="width:100%;"
onFocus="WdatePicker({isShowClear:false,readOnly:true,dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'attStaDate\')}'})"
ltype="date"/>
</td>
</tr>
<tr>
<td class="label"><strong>*</strong>申请说明:</td>
<td class="input-250" colspan="3"><textarea id="attendanceDesc" name="attendanceDesc" validate="{required:true}" rows="4" cols="8"></textarea></td>
</tr>
</table>
<div style="margin-left: 180px; margin-top: 10px; float: left;">
<a class="l-button l-button-submit" href="javascript:iom.submitForm('#addAttApplyDialog','#submitForm')" title="保存"><span>保存</span></a>
<a class="l-button l-button-reset" href="javascript:iom.hiddenDialog('#addAttApplyDialog');" title="取消"><span>取消</span></a>
</div>
</div>
</form>
<HTML>
<BODY>
<script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>开始:<input id="attStaDate" onchange="f1()" value="2013-09-11 09:29:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })" /><br/>
结束:<input id="attEndDate" onchange="f1()" value="2013-09-12 19:29:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false })" /><br/>
时间:<input id="hourAmt" readonly="true" />/小时<br/>
<script>
var startwork="09:10:00";
var endmoon="12:00:00";//中午下班时间
var startnoon="13:00:00";//下午上班时间
var endwork="18:00:00";//下班时间
function t2h(t){
return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
}
function f1(){
var ed=$("#attEndDate").val().replace(/-/g, "/")
var sd=$("#attStaDate").val().replace(/-/g, "/");
var st=sd.slice(11),et=ed.slice(11);
if(!ed||!ed) return;
var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
var restTime=t2h(startnoon)-t2h(endmoon);
var h=0,_h;
if(st > startwork){
h=t2h(endwork)-t2h(st);
if(st< startnoon ){
_h=t2h(startnoon)-t2h(st)
h-= _h>restTime?restTime:_h;
}
}
if(et< endwork){
h-= t2h(et)-t2h(endwork) ;
if(et< startnoon ){
_h=t2h(startnoon)-t2h(et)
h+= _h>restTime?restTime:_h;
}
}
h=Math.round( h+(eDate-sDate)/864E5 *8);
$("#hourAmt").val(h)
return h
}
f1();
</script>
</BODY>
</HTML>
<HTML>
<BODY>
<script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
开始:<input id="attStaDate" onchange="f1()" value="2013-09-11 12:00:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })" /><br/>
结束:<input id="attEndDate" onchange="f1()" value="2013-09-11 13:00:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false,minDate:'#F{$dp.$D(\'attStaDate\')}' })" /><br/>
时间:<input id="hourAmt" readonly="true" />/小时<br/>
<script>
var startwork="09:10:00";
var endmoon="12:00:00";//中午下班时间
var startnoon="13:00:00";//下午上班时间
var endwork="18:00:00";//下班时间
function t2h(t){
return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
}
function f1(){
var sd=$("#attStaDate").val().replace(/-/g, "/");
var ed=$("#attEndDate").val().replace(/-/g, "/")
var st=sd.slice(11),et=ed.slice(11);
if(!ed||!ed) return;
var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
var restTime=t2h(startnoon)-t2h(endmoon);
var h=8,_h,ext;
if(st > startwork){
h=t2h(endwork)-t2h(st);
if(st< startnoon ){
_h=t2h(startnoon)-t2h(st)
h-=_h>restTime?restTime:_h;
}
}
if(et< endwork){
h-= t2h(endwork)- t2h(et);
if(et< startnoon ){
_h=t2h(startnoon)-t2h(et)
h+=_h>restTime?restTime:_h;
}
}
h=Math.round( h+(eDate-sDate)/864E5 *8);
$("#hourAmt").val(h)
return h
}
f1();
</script>
</BODY>
</HTML>
var startwork=" 09:00:00";
var endwork=" 18:00:00";
var endmoon=" 12:00:00";
var startnoon=" 13:00:00";
var hour=0;
var days=0;
//开始时间 结束时间
// var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
// var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/");
var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
//开始时间计算
var startDay=sd.substring(0,sd.length-9);//开始日期
var min=sd.substring(14,16);//开始时间分钟
var hour=sd.substring(11,13);//开始时间小时
if(parseInt(min)>30){
hour=parseInt(hour)+1;
}
var staDate=new Date(startDay+" "+hour+":00:00");
var timePoor=staDate.getTime()-(new Date(startDay+startwork)).getTime();
var daystart=0
if(timePoor>0){
daystart=timePoor/(3600*1000);
if(parseInt(daystart)>3&&parseInt(daystart)<8){
daystart=parseInt(daystart)-1;
}else if(daystart>=8){
daystart=parseInt(daystart)-2;
}else{
daystart=daystart;
}
}else{
daystart=0;
}
//结束时间计算
var endDay=ed.substring(0,ed.length-9);//结束日期
var mined=ed.substring(14,16);//开始时间分钟
var houred=ed.substring(11,13);//开始时间小时
if(parseInt(mined)>30){
houred=parseInt(houred)+1;
}
var endDate=new Date(endDay+" "+houred+":00:00");
var timePoorEnd=(new Date(endDay+endwork)).getTime()-endDate.getTime();
var dayend=0;
if(timePoorEnd>0){
dayend=timePoorEnd/(3600*1000);
if(parseInt(dayend)>3&&parseInt(dayend)<8){
dayend=parseInt(dayend)-1;
}else if(dayend>=8){
dayend=parseInt(dayend)-2;
}
}else{
dayend=0;
}
var hour=0;
var dayPoor=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime()
hour=dayPoor/(3600*1000*24);
hour=hour*8+8;
//alert(hour+"小时");
hour=parseInt(hour)-parseInt(daystart)-parseInt(dayend);
// var dateTim=endDate.getTime()-staDate.getTime();
//var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
$(dialog).find("#hourAmt").val(hour);