这里主要是将24小制时间转化为数字, 与4次打卡时间数字进行比较, 其中, 核心在于如何将上午10点以前的时间识别出来(缺零).
可以用字串函数来解决, 举例如下:
其中,F11是要检查的时间记录所在单元格, 740指早晨7:40.
=IF(IF(LEFT(RIGHT(F11,5),1)<>"1",LEFT(RIGHT(F11,4),1)*100,LEFT(RIGHT(F11,5),2)*100)+RIGHT(F11,2)>740,"迟到","按时")
其它时间点的设置可照此稍作修改, 只需要改时间点 (740改为1200, 1300等), 并修改740前比较符号>代表迟到, <代表早退.
=IF(OR(--TEXT(B2,"h:mm")<=--"7:40",AND(--TEXT(B2,"h:mm")>=--"12:00",--TEXT(B2,"h:mm")<=--"13:00"),AND(--TEXT(B2,"h:mm")>=--"17:00",--TEXT(B2,"h:mm")<=--"17:30"),--TEXT(B2,"h:mm")>=--"20:30"),"",IF(AND(--TEXT(B2,"h:mm")>--"7:40",--TEXT(B2,"h:mm")<--"10:00"),"迟到","早退"))
进行时间比较呀!获取系统当前时间跟班次进行比较,如果在班次之前打卡就是正常,往数据库存一个正常状态,反之则存异常状态。时间比较别说不会啊,如果是字符串的时间转换成Date格式,进行大小比较。如果是上班,打卡时间小于班次就是正常,反之就是迟到的。如果是08:00上班,在08:00打卡也是正常的,比较时间大小精确到时分就行啦。下班也是一样,这只是思路。具体的数据库表是怎么设计那就看你怎么做了。
if函数嵌套多了,不容易维护,还是建议用case when吧.方便理解,查正及纠错