我从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)
答案 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)
我是这样做的:
使用UNIX_TIMESTAMP()
功能从数据库中提取时间。
UNIX时间戳以秒为单位,因此请向其添加4*60*60
。
使用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);
}