PHP//转换/计算DATE

标签 php html mysql date

我两天来一直在尝试解决这个问题,但没有成功...... 首先是我的代码:

PHP 版本:5.4

脚本1:

query = "SELECT start, end FROM timetable WHERE ........";
$result = mysql_query($query, $db) or die(mysql_error());
$sqlarr = mysql_fetch_array($result, MYSQL_ASSOC);
$times  = array($sqlarr['start'], $sqlarr['end']);

$calced = strtotime($times[1]) - strtotime($times[0]);
$total = date("H:i:s", $calced-3600);            //<-- -3600 Fixed it
echo "<br>Total: ".$total;

开始和结束时间的格式为 00:00:00。每次此脚本计算时,都会将 1 小时添加到结果中。因此,如果我要获取 5 分钟的结果,我将得到 01:00:05。 为什么???

这个就更奇怪了。 脚本2:

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    echo " | ".$row['total']."<br>";
    $add += strtotime($row['total']);}

echo $add;

第一个脚本计算从开始到结束的总时间。第二个应该从数据库中获取总时间并计算所有条目的总和。对于每个条目,第二个脚本会减少 2 小时。

示例: 数据库 => 开始 = 12:32:00 结束 = 12:32:15

Script1 Result1 = 01:00:15(这个额外的时间从哪里来?)已修复

每个 Result1 都存储在同一个表(db)中。 Script2 正在加载所有这些行并通过 while 循环处理它们。

根据有多少条目,脚本减去几个小时。
0 条 => 总计:00:00:00
1 条记录 => 总计:23:00:xx
2 条记录 => 总计:20:00:xx
3 条记录 => 总计:18:00:xx
4 条记录 => 总计:16:00:xx
因此,对于 2 个条目,它会继续从每个总计算中减去 2 小时,这显然是不正确的。

谢谢你们。使用 DateTime 使这变得简单且无错误!

最佳答案

我不太确定您使用 strtotime 函数的情况,但我已经尝试过这个解决方案并且它有效,如果您有 php > 5.2:

您可以使用DateTime类和 date_diff 函数来获取差异日期,请在此处阅读更多信息:https://www.php.net/manual/en/datetime.diff.php

示例:

// start date
$start = new DateTime("09:23:38");
// end date
$end = new DateTime("09:23:54");

// calculate difference
$calc = date_diff($start, $end);

// prints 00:00:16
echo $calc->format('%h:%i:%s');

根据this answer默认情况下日期似乎从 1:00:00 开始,因此您可以将日期减去 3600 秒(1 小时),如下所示:

$start = strtotime("11:23:38");
$end = strtotime("11:23:54");

$calc = $end - $start;
echo date('H:i:s', $calc - 3600);

关于PHP//转换/计算DATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823725/

相关文章:

php - SpreadsheetReader 对象创建无一异常(exception)地失败

javascript - CakePHP 模式在卸载后不显示 'DebugKit.Toolbar'

php - 使用 SQL 查找可用时间段

php OOP调用当前类之外的类中的方法

php - 如何混淆 Symfony PHP Web 应用程序?

asp.net - 这个表结构如何实现DIV

html - Google Chrome 表单自动填充及其黄色背景

mysql - 当 ON 语句为 false 时表连接是否有效?

javascript - 如何显示来自文本区域输入的回车?

SQL - 是否有执行 "foreach A in table, if !B, insert B"的查询?