gpt4 book ai didi

php - 存储到变量中时 strtotime 错误清空时间参数

转载 作者:行者123 更新时间:2023-11-28 23:44:38 24 4
gpt4 key购买 nike

我正在尝试使用 php 计算两个数据库字段之间的分钟差异。第一个字段(attendance)是时间戳,第二个字段(check_in)是时间。

这是我试过的 PHP 代码:

$sql = "
select e.attendance, s.check_in, s.check_out
from employee e
inner join my_schedule s on s.id = e.sch_id
where e.emp_id = '".$emp_id."'
";
$query = mysql_query($sql);
if ($query) {
$row = mysql_fetch_array($query);
echo 'employee checked in at '.strtotime($row['attendance']); // employee checked in at 2015-11-18 08:48:23
$late = round((strtotime($row['check_in']) - strtotime($row['attendance']))/60,0);
if ($late < 0) {
echo "you're late!!";
}

确实出现了“你迟到了”消息,但还有一条错误消息:

strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Program Files\xampp\htdocs\myproject\page1.php

为什么只有当我将 strtotime() 的值存储到变量中时才会出现错误?

我正在使用:

当前 PHP 版本:5.0.5

MySQL 4.1.14

更新:

这是echo var_dump($row['attendance']);的结果(数据类型timestamp)

string(19) "2015-11-18 08:48:23"

这是echo var_dump($row['check_in']);(数据类型time)

string(8) "08:00:00"

PHP 将这些字段视为字符串而不是时间是否正常?

更新 2:我找到了问题的根源!查询使用了参数 (emp_id),其中一个 emp_id 返回零结果,因此 strtotime 返回了错误。

解决方案是我添加了一个 IF 子句以确保在运行 strtotime 之前行具有有效值。

if ($row['check_in'] != '' && $row['attendance'] != '') {
$late = round((strtotime($row['check_in']) - strtotime($row['attendance']))/60,0);
}

最佳答案

这里的问题是 strtotime 需要一个日期,而不仅仅是一个时间。所以你可以像这样从你的出勤中提取日期:

$attendance = "2015-11-18 08:48:23";
$check_in = "08:00:00";
if ( strlen($check_in) <= 8 ) { // Does not include date. Prepend it automatically:
$parts = explode(" ",$attendance);
$attendance_date = $parts[0];
$check_in = "{$attendance_date} {$check_in}";
}
$late = round((strtotime($check_in) - strtotime($attendance))/60,0);

在我们运行计算之前要明确一点,我们希望最终得到:

$attendance = "2015-11-18 08:48:23";
$check_in = "2015-11-18 08:00:00";

这里有更多strtotime()的例子

echo strtotime("2015-11-18 08:48:23"),"\n";
echo strtotime("18 November 2015"),"\n";
echo strtotime("now"),"\n";
echo strtotime("+1 day"),"\n";
echo strtotime("+1 week"),"\n";
echo strtotime("+1 week 2 days 3 hours 4 seconds"),"\n";
echo strtotime("last Monday"),"\n";
echo strtotime("next Friday"),"\n";

阅读更多:php.net/strtotime

关于php - 存储到变量中时 strtotime 错误清空时间参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com