好的,有4个时钟输入/输出的实例。有一个时钟,午餐时钟,午餐时钟和最后一个时钟。这是一个24小时制,时间需要四舍五入到最接近的.25(15分钟)。
*For reference, a is the first clock in hour, b is the clock out for lunch hour
c is the clock in hour from lunch, and d is the final clock out hour
*e is the first clock in minute, f is the clock out for lunch minute
g is the clock in from lunch minute, and h is the final clock out minute
*So for example, if somebody clocked in at 5:30, a=5 and f=30
a clock out for lunch at 12:00 gives b=12 and g=0, etc.
*The way this code works in a nutshell is to find the total time elapsed and then
subtract the lunch break time from it.
//Find total time
a=d-a;
e=h-e;
//Find lunch break time
y=c-b;
z=g-f;
if(e>=0 && z>=0){
hours=a-y;
minutes=e-z;
if(minutes<0){minutes=minutes*(-1);}
}else if(e<0 && z<0){
e=e*(-1);
z=z*(-1);
hours=a-y;
minutes=e-z;
if(minutes<0){minutes=minutes*(-1);}
}else{
if(e<0){e=e*(-1);}
if(z<0){z=z*(-1);}
if(e<=z){hours=a-y-1;}
else{hours=a-y;}
minutes=e-z;
if(minutes<0){minutes=minutes*(-1);}
}
a=hours;
e=minutes;
//This rounds to the nearest 15 minutes/quarter hour
if(e<15){
if(e>=8){e=15;}
else if(e<8){e=0;}}
if(e<=30 && e>=15){
if(e>=23){e=30;}
else if(e<23){e=15;}}
if(e<=45 && e>30){
if(e>=38){e=45;}
else if(e<38){e=30;}}
if(e<=60 && e>45){
if(e>=53){e=0;}
else if(e<53){e=45;}}
e=e/60;
a=a+e;
}
if(a<0){a=a+24;}
$(totaltime).attr('value',a);
}
代码非常接近工作,只是随机的情况下它不起作用,并且它将在一小时或一小时左右的时间内关闭。此外,这是在一个高度受限的服务器上托管的HTML页面上用javascript编写的,所以我无法真正添加任何新库或任何东西。
如果你有更好的想法,那么肯定可以随意废弃我的代码,这三个if / else语句有点难以解释,这就是代码无法正常工作的原因。我大部分都展示了代码,表明我一直在努力,而不只是试图利用你的帮助哈哈。
我也道歉但是我必须离开电脑一段时间,所以如果你有一些建议或方法来解决这个问题请把它们扔到那里,我会在我回来时看看它们。
答案 0 :(得分:2)
让javascript完成日期类的所有工作:
//Assuming the day is today
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDay();
//
var clockIn = new Date(year, month, day, a, e).getTime();
var clockOut = new Date(year, month, day, b, f).getTime();
var clockIn_afterLunch = new Date(year, month, day, c, g).getTime();
var clockOut_afterLunch = new Date(year, month, day, d, h).getTime();
var preLunchTimeWorked = clockOut - clockIn;
var postLunchTimeWorked = clockOut_afterLunch - clockIn_afterLunch;
var timeWorked = preLunchTimeWorked + postLunchTimeWorked;
var secondsWorked = timeWorked/1000;
var minutesWorked = secondsWorked/60;
var hoursWorked = minutesWorked/60;
//Much easier to work with in my opinion
希望能帮助您找到答案
答案 1 :(得分:0)
处理时间的(公平)标准方法是将所有内容转换为秒,并在几秒钟内完成数学运算。
time1 = seconds1 +(60 * minute1)+(3600 * hours1)
等。如果时间可以跨越午夜,你会想要将它们引用到某个时代(天文学家使用2000年1月1日午夜)。
然后减去你的时间,四舍五入到你需要的精度(15分钟= 900秒),然后将你的增量转换为小时和分钟。