添加13个小时到时间戳

aal*_*aap 13 php time

我有一个表的时间戳值如下:

    2009-07-14 02:00:00

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

    2009-07-14 15:00:00

在PHP中最简单的方法是什么?

mac*_*die 20

我知道

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

是臭,但它会给你一个想法.

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

但我想你真正想要的是使用时区.

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


Ion*_*tan 15

使用基本算法进行时间计算时,时区和夏令时存在很多问题.最好的解决方案是依赖PHP自己的日期/时间函数,比如strtotime()mktime().我在博客上写过关于DST问题的文章.

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


aal*_*aap 3

我知道这个问题很久以前就被问到了,而且我已经选择了答案,但我相信为新用户指明一个更现代、更正确的方向很重要,那就是使用神奇的Carbon库:

>>> 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",
   }
Run Code Online (Sandbox Code Playgroud)

Carbon 不仅使执行所请求的计算变得更简单,还可以防止您在手动尝试执行相同操作时可能犯的任何潜在错误。

上面输出示例中的 shell 是 Laravel Tinker。Laravel 附带了 Carbon,所以上面的语句是开箱即用的。如果您没有使用现代 PHP 框架,那么您应该使用。向其中添加碳很容易。