在PHP中添加时间

时间:2009-09-21 21:10:13

标签: php mysql datetime time compare

我从mysql db中提取日期时间,我想将X小时添加到它,然后将其与当前时间进行比较。到目前为止我得到了

$dateNow = strtotime(date('Y-m-d H:i:s'));
$dbTime = strtotime($row[0]);

然后我尝试了$ dbTime + strtotime(“4小时”);但是4小时似乎在当前时间加4小时而不是4小时。如何将X小时添加到dbTime?

注意:我使用的是php 5.1.2,因此date_add不起作用(5.3.0)

8 个答案:

答案 0 :(得分:3)

  

然后我尝试了$ dbTime + strtotime(“4小时”);但是4小时似乎在当前时间加4小时而不是4小时。如何将X小时添加到dbTime?

strtotime有一个可选的第二个参数。在那里提供一个Unix时间戳,输出将相对于该日期而不是当前日期。

$newTime = strtotime('+4 hours', $dbTime);

你也可以使用Unix时间戳是基于秒的这一事实 - 如果你知道四小时是几秒钟,你可以将它添加到时间整数值。

答案 1 :(得分:3)

你有很多选择:

1

$result = mysql_query("SELECT myDate FROM table");
$myDate = mysql_result($result, 0);
$fourHoursAhead = strtotime("+4 hours", strtotime($myDate));

2

// same first two lines from above
$fourHoursAhead = strtotime($myDate) + 4 * 60 * 60;

3

$result = mysql_query("SELECT UNIX_TIMESTAMP(myDate) FROM table");
$myDate = mysql_result($result, 0);
$fourHoursAhead = $myDate + 4 * 60 * 60;

4

$fourHoursAhead = strtotime("+4 hours", $myDate);

5

$result = mysql_query("SELECT UNIX_TIMESTAMP(DATE_ADD(myDate, INTERVAL 4 HOUR))");
$fourHoursAhead = mysql_result($result, 0);

答案 2 :(得分:2)

time()和strtotime()会以秒为单位生成unix时间戳,因此您可以执行以下操作,只需提供数据库并进行比较:

$fourHours = 60 * 60 * 4;
$futureTime = time() + $fourHours;

答案 3 :(得分:1)

strtotime(“+ 4小时”,$ dbTime);

第二个参数是时间戳,用作计算相对日期的基础;它默认为当前时间。查看documentation

修改 在短时间内,最多1周,添加时间戳的秒数是完全可以接受的。一周总有(7 * 24 * 3600)秒;同样不能说一个月或一年。此外,unix时间戳只是自Unix Epoch(1970年1月1日00:00:00 GMT)以来经过的秒数。这不受时区或日光节省的影响。只有将unix时间戳转换为实际日历日期和时间时,时区和夏令时才会很重要。

答案 4 :(得分:0)

我倾向于使用time()函数,手册中的这个页面显示它们显示未来一周的日期: http://us3.php.net/manual/en/function.time.php

答案 5 :(得分:0)

我是这样做的:

  1. 使用UNIX_TIMESTAMP()功能从数据库中提取时间。

  2. UNIX时间戳以秒为单位,因此请向其添加4*60*60

  3. 使用PHP的localtime()strftime()函数将修改后的UNIX时间戳转换为日期。

    query("SELECT UNIX_TIMESTAMP(someDatetimeColumn) ...");
    . . .
    $dbTimeAdjusted = localtime($row[0] + 4*60*60);
    

答案 6 :(得分:0)

进行比较的最安全的方法可能就在SQL

SELECT * FROM my_table WHERE someDateTimeColumn < DATE_ADD(NOW(), INTERVAL 4 hour)

由于您使用PHP组装它,您可以动态地将“4小时”位替换为您需要比较的代码。

(注意:将比较的另一端的整个计算放到列中允许MySQL每个查询执行一次计算,而不是每行一次,如果该列有一个,也使用表的索引。)

答案 7 :(得分:0)

假设数据库返回的时间戳是SQL格式,以下情况应该可以正常工作:

$dbTime = strtotime($row[0]);
$nowTime = time();

$future_dbTime = strtotime("+4 hours", $dbTime);

$diff_time_seconds = $nowTime - $dbTime;

if ($diff_time_seconds > 0) {
       echo "The current time is greater than the database time by:\n";
       $not_equal = true;

    }
if ($diff_time_seconds == 0) {
       echo "The current time is equal to the database time!";
    }
if ($diff_time_seconds < 0) {
       echo "The current time is less than the database time by:\n";
       $not_equal = true;
    }

if ($not_equal) {
$diff_time_abs_seconds = abs($diff_time_seconds);
echo date('h:m:s', $diff_time_abs_seconds);
}