1

只有一个问题:是否可以比较日期时间格式和时间格式?

我有表格employee_attendance(日期时间类型)和表格employee_schedule(时间类型),这是为了确定员工是否迟到。

请查看我的代码。

$CheckInNew  = strtotime('2013-06-05 08:47:53');
$OnDutyTimeNew   = strtotime('08:00:00');

if($CheckIn > $OnDutyTimeNew){

// confirming that the employee is late

} else {

// confirming that the employee is NOT late

}

有任何想法吗?

谢谢

4

5 回答 5

2

尝试这个:

$CheckInNew  = date('B',strtotime('2013-06-05 08:47:53'));
$OnDutyTimeNew   = date('B',strtotime('08:00:00'));

if ($CheckInNew > $OnDutyTimeNew)
    echo 'late!';
else
    echo 'early!';

我使用 be 作为Internet SwatchTime 的关键字。有关更多信息,这是链接

更新: PHPFiddle

于 2013-06-05T00:56:08.180 回答
0

您可以在 SQL 中执行此操作:

-- checkin is the column with their checkin time
-- scheduled is the column with their scheduled time
SELECT
    TIMEDIFF(TIME(checkin), scheduled) AS diff

如果diff是负面的,那么他们是准时的。如果是正数,他们会迟到

参考

于 2013-06-05T00:56:43.450 回答
0

为什么不将时间解析为时间戳,然后使用函数strtotime ()进行比较

于 2013-06-05T00:45:02.623 回答
0

由于日期格式包含前导零,您可以简单地使用纯字符串比较来比较日期。

$checkInDateTime  = '2013-06-05 08:47:53';
$dutyTime = '08:00:00';

if (substr($checkInDateTime, -8) > $dutyTime) {
    echo "Late";
} else {
    echo "Early";
}

通常,一天分为 1,440 分钟。Swatch Internet time将一天分为 1000 个节拍。因此 1 拍 = 1.44 分钟。用于Swatch Internet time比较正常时间是不准确的,因为它不包括秒数并且存在分钟误差(至少这是我认为的)。

于 2013-06-05T02:15:24.143 回答
0

假设您要比较与 CheckInDateOnly 日期相同的日期。

您可以通过仅将日期时间转换为日期并将其添加到 OnDutyTime 变量来执行此操作。

$checkInDateTime = strtotime('2013-06-05 08:47:53');
$checkInDateOnly = date("Y-m-d", $checkInDateTime);
$OnDutyTimeNewWithSameDateAsCheckIn = strtotime($checkInDateOnly . '08:00:00');

echo ($checkInDateTime > $OnDutyTimeNewWithSameDateAsCheckIn ? "Late" : "Early");

使用示例:PHPFiddle

于 2013-06-05T00:57:52.360 回答