使用PHP计算是否少于或超过24小时

使用PHP计算是否少于或超过24小时,php,datetime,Php,Datetime,我想计算Cron作业每小时运行1小时的两个设定时间之间的时间 例如: 2012年6月20日下午2:18 2012年6月21日下午3:00*Cron作业运行,超过24小时 我将如何在PHP中计算它来完成我将在后面开发的任务 我尝试过的脚本: define("SECONDS_PER_HOUR", 60*60); date_default_timezone_set('UTC'); $result = mysql_query("SELECT * FROM tickets") or die(mysql_

我想计算Cron作业每小时运行1小时的两个设定时间之间的时间

例如:

2012年6月20日下午2:18 2012年6月21日下午3:00*Cron作业运行,超过24小时

我将如何在PHP中计算它来完成我将在后面开发的任务

我尝试过的脚本:

define("SECONDS_PER_HOUR", 60*60);
date_default_timezone_set('UTC');

$result = mysql_query("SELECT * FROM tickets") or die(mysql_error());

while($row = mysql_fetch_array($result)) {
    // Calculate the start time
    $str = $row['openTime'] . " " . $row['openDate'];

    $startdatetime = strtotime($str);

    $enddatetime = time();

    // calculate the difference in seconds.

    $difference =  $enddatetime - $startdatetime;

    $hoursDiff = $difference / SECONDS_PER_HOUR;

    $minutesDiffRemainder = $difference % SECONDS_PER_HOUR;

    echo $row['ticketID'] . ": " . $hoursDiff . "h " . $minutesDiffRemainder . "m<br />";
}

您是否考虑过实际执行一个满足您需要的查询,而不是提取所有数据并使用PHP进行比较?你可以


从票证中选择*日期\打开时间,间隔24小时>缩短时间


通过阅读您的代码,我假设您需要使opentime字段成为一个时间戳,包含日期和时间。但无论如何,在大多数情况下,这是明智的选择

你试过什么吗?最终结果:MFT-252224:74.51666667H 1860m MFT-768337:18.4333333333h 1560m MFT-848286:-7.816666667H-2940m MFT-70960:-0.0075h-27m MFT-543912:-0.0075h-27m MFT-512905:-0.0075h-27m MFT-496896:-0.0075h-27m MFT-879190:-0.0075h-27mKris,我编辑了一下你的代码,使用最早设置的日期\默认\时区\作为其配置。然后首先格式化字符串,然后运行strotime。第二次你本可以通过利用时间来节省。现在只剩下两个UNIX时间戳之间的差异了,这两个时间戳在一个小搜索应该会很快发现之前就已经被询问过了。我强烈建议也研究一下这个函数:@hakre:这是回答问题的新方法吗?只需编辑实际问题并将您的答案放在那里?从日期添加开放时间的票证中选择*INTERVAL 24 HOUR>CURTIME;通过使用它,我的输入应该是什么样的,因为我有日期,还是应该让MySQL自动执行?好吧,如果不在应用程序中设置日期是有意义的,您可以使用CURTIME或NOW on Insert。这将照顾到细节;你甚至可以有一个默认的列。请注意,这还有比较来自同一系统的时间戳的额外好处:您总是在数据库运行时进行操作。通常情况下,所涉及的系统在一天中的时间非常相似,但有时它们可能会分离。然后将24小时与“正确”值时间戳进行比较。