添加13个小时到时间戳

时间:2009-07-14 11:16:28

标签: php time

我的表格的时间戳值如下:

    2009-07-14 02:00:00

我需要在运行时显示它们,添加13个小时,例如:

    2009-07-14 15:00:00

在PHP中执行此操作的最简单方法是什么?

8 个答案:

答案 0 :(得分:19)

我知道

date( "Y-M-d H:i:s", strtotime( $timestamp_from_array ) + 13 * 3600 );

很臭,但它会给你一个想法。

strtotime将时间戳字符串转换为时间戳值,然后我们添加小时数并使用date函数将其转换回数组中的时间戳格式。

但我想你真正想要的是使用time zones

编辑: igstan是正确的,您还应该注意夏令时间在这些偏移之间的变化。

答案 1 :(得分:15)

使用基本算法进行时间计算时,时区和夏令时存在很多问题。最好的解决方案是依靠PHP自己的日期/时间函数,如strtotime()mktime()。我写了DST problems on my blog

echo date('Y-M-d H:i:s', strtotime('2009-07-14 02:00:00 + 13 hours'));

答案 2 :(得分:2)

你可以从数据库中做出添加吗?

SELECT ... DateAdd(hh, 13, DateField) AS DateField

(SQL Server)

答案 3 :(得分:1)

您可以使用http://de3.php.net/manual/en/function.strptime.php将其转换为unix时间戳。 然后你可以轻松地添加13 * 60 * 60并使用http://de3.php.net/manual/en/function.date.php将其转换回时间戳。

另一种方式是通过爆炸功能,但我认为这可能会更复杂,因为你必须看看天/月/年改变和东西

答案 4 :(得分:1)

你有一张包含时间戳的表吗?如果它是MySQL数据库,您可以使用addtime在数据库中执行此操作:SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');

如果您使用的是PHP Zend Framework,您可以执行以下操作:

 $date=new Zend_Date(Array('year'=>$iYear,'month'=>$iMonth,'day'=>$iDay));
 // changes $date by adding 12 hours
 $date->add('12:00:00', Zend_Date::TIMES);

或者,您可以使用本机PHP4函数来执行此操作,例如: [更快,更不准确:不考虑闰秒/时区变化等]

$datestamp=strtotime('2009-07-14 02:00:00'); // It'll probably be better using mktime
$datestamp=$datestamp+(60*60*13); // 60 seconds times 60 minutes times 13 hours

或 [更慢,更准确]

  $datestamp = strtotime('2009-07-14 02:00:00'); // It'll probably be better using mktime
  $newDate = date('Y-m-d H:i:S', mktime(date('H',$datestamp)+13, date('i',$datestamp), date('s',$datestamp), date('m',$datestamp), date('d',$datestamp), date('Y',$datestamp)));

或者,如果您使用PHP {5}使用Datetime函数

$date = new DateTime('2009-07-14 02:00:00');
date_add($date, new DateInterval("P13H"));

答案 5 :(得分:1)

我知道很久以前就已经问了这个问题,我已经选择了答案,但我认为将新用户指向一个更现代,更正确的方向非常重要,这个方向正在使用梦幻般的Carbon库:< / p>

>>> Carbon\Carbon::parse('2009-07-14 02:00:00')
... ->addHours(13)
... ->format('Y-m-d H:i:s');
=> Carbon\Carbon {#869
     +"date": "2009-07-14 15:00:00.000000",
     +"timezone_type": 3,
     +"timezone": "UTC",
   }

Carbon不仅可以简化执行请求的计算,还可以防止您在手动尝试执行相同操作时可能出现的任何错误。

上面输出示例中的shell是Laravel Tinker。 Laravel随附Carbon,因此上述声明可以开箱即用。如果您没有使用现代PHP框架,那么您应该这样做。添加碳很容易。

答案 6 :(得分:0)

<?php
echo date('Y-m-d H:i:s', strtotime('+13 hours', strtotime('2009-07-14 02:00:00')));
?>

答案 7 :(得分:-1)

我们假设您正在从表中选择一个名为&#34; datetime_field &#34;的特定日期字段。来自行ID 3000.就像这一样简单!

SELECT *, ADDTIME(`datetime_field`,'0 13:00:00') as new_datetime
FROM `table_name`
WHERE id = 3000

当然,如果想要更新,这显然可以用在更新查询中。

或者,如果您只是在查询中添加13小时(时区差异)。可以使用MySQL NOW()作为原始时间,只需添加上面的时间。 选择,更新或插入它都是相同的方法!它将是:

SELECT *, NOW() as current_datetime,
          ADDTIME(NOW(),'0 13:00:00') as new_datetime
FROM `table_name`
WHERE id = 3000

保持简单快捷!

:○)