Rumah  >  Artikel  >  pembangunan bahagian belakang  >  前辈们,师兄们,小弟我在比较时间的有关问题上被困扰住了,特别需要你们帮助,拜托你们帮帮小弟我

前辈们,师兄们,小弟我在比较时间的有关问题上被困扰住了,特别需要你们帮助,拜托你们帮帮小弟我

WBOY
WBOYasal
2016-06-13 12:14:561005semak imbas

前辈们,师兄们,我在比较时间的问题上被困扰住了,特别需要你们帮助,拜托你们帮帮我!
考勤时间存储格式问题。我用的bigint,存储了时间戳。
限定:早上9点之前刷卡,5点半之后刷卡,算作没有迟到也没有早退。
刷卡签到和刷卡签退分别用了两张表:signin和signout。
遇到的问题有:
1. 我如何在用户刷卡的时候就判断他是否迟到或早退。
2. 在月末统计的时候,我如何获取他本月所有迟到和早退的记录。

关于时间的比较,感觉很头疼。还望各位前辈指点我,十分感谢。我用的thinkphp mysql。

数据表定义如下:

create table ts_user
(wxname varchar(50) not null primary key,
 name varchar(50) not null,
telnum char(11) not null unique,
email varchar(50) unique,
address varchar(100)
)ENGINE=InnoDB DEFAULT charset=utf8;

create table ts_signin
(signid int not null auto_increment primary key,
 wxname varchar(50) not null,
 date timestamp not null,
location varchar(100) not null
)DEFAULT charset=utf8;

create table ts_signout
(signid int not null auto_increment primary key,
 wxname varchar(50) not null,
 date timestamp not null,
location varchar(100) not null
)DEFAULT charset=utf8;

alter table ts_signin add foreign key (wxname) references ts_user(wxname);
alter table ts_signout add foreign key (wxname) references ts_user(wxname);

我就在这一边想一等,能得到前辈指点,感激不尽!
------解决思路----------------------

<br />    	echo date('h', strtotime("2015-01-27 09:01:10")); //9点<br />    	echo date('i', strtotime("2015-01-27 09:01:10"));//01分<br />

------解决思路----------------------
记录数据的同时判断迟到和早退,并作为一个新字段保存
当天9点的时间戳:strtotime(date('Y-m-d') . ' 09:00')跟time()对比就可以了
------解决思路----------------------
<br /><br />create table ts_user<br />(wxname varchar(50) not null primary key,<br /> name varchar(50) not null,<br />telnum char(11) not null unique,<br />email varchar(50) unique,<br />address varchar(100)<br />)ENGINE=InnoDB DEFAULT charset=utf8;<br /><br />create table ts_signin<br />(signid int not null auto_increment primary key,<br /> wxname varchar(50) not null,<br /> sdate int(10) not null,<br />chidao int(1) default 0,  // 1迟到,0没有迟到 int或bool 类型都行<br />edate int(10) not null,<br />zaotui int(1) default 0, //1早退,0没有早退, <br />location varchar(100) not null  // 这是干嘛的不知道<br />)DEFAULT charset=utf8;<br />

直接select count(chidao ) as chidaoa from  ts_user,ts_signin, where ts_signin.wxname =ts_user.wxname and (1个月的判断)
类似这个就行, 
每天加1条数据, 迟到,早退,都知道, 记得在每天晚上12点刷新, 没有签到,的,列为迟到, 或早退,插入数据段时候直接 写入chidao, 早退判断
------解决思路----------------------
我设置够公司的考勤机,比较复杂,还可以根据用户分部门,分时间组;但是整体来说,一个用户只可能属于一个考勤排班组。

考勤机还有一个设置,就是什么时候开始判断为上班,什么时候开始判断为下班;然后配上考勤排班里面的上下班时间,就不然判断他是否迟到或早退。

月末统计比较简单,知道获取到所有符合考勤的时间,比如你9:00上班,你就把所有上班考勤早于9:01分的考勤全部列出来了,然后循环一下日期,顺便去除放假的时间,自然而然的,迟到就出来了

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn