1).自己处理很容易出错,建议使用从PHP5.2之后新增的DateTime、DateInterval和DateTimeZone类。
2).使用date_default_timezone_set(‘Asia/Shanghai’);
设置默认时区为中国时区,或者你也可以在php.ini文件中配置。
3).使用DateTime管理时间和日期:
4).DateTime::createFromFormate()静态方法使用的日期格式与date()一样。可以的日期和格式可以参见http://php.net/manual/zh/datetime.createfromformat.php
5).使用DateInterval偏移时间:
add($interval);
echo $datetime->format('Y-m-d H:i:s');
有效的周期标志如下:
- Y(年)
- M(月)
- D
- W
- H
- M(分)
- S
间隔的周期中M即表示月,又表示分。所以怎么区分呢?前3个表示日期,后面的表示时间,这就需要用字母T来分隔。可以使用T2M表示间隔两秒。
$dateStart = new \DateTime();
$dateInterval = DateInterval::createFromDateString('-1 day');
$datePeriod = new DatePeriod($dateStart, $dateInterval, 3);
foreach ($datePeriod as $date) {
echo $date->format('Y-m-d'), PHP_EOL;
}
5).DateTimeZone类:
setTimezone(new DateTimeZone('Asia/Hongkong'));
【PHP最佳实践之DateTime、DateInterval和DateTimeZone】最好是一直使用UTC时间。服务器使用,自己开发默认也是,然后存入数据库也是,这样的话把数据显示给用户看的话转换为适当时区的日期和时间就行了。
6).上面说到的DatePeriod类适合在迭代处理一段时间内反复出现的一系列时期和时间,重复在日程表中记事就是一个很好的例子。
7).nesbot/carbon组件是一个不错的时间组件
推荐阅读
- 对GO切片的理解
- 小程序商城网站开发秒杀模块篇
- 盲盒购物网站系统开发建设 第三篇
- Netty核心概念之ChannelHandler&Pipeline&ChannelHandlerContext
- 简单的线程池实现多线程对大文件的读取
- SSH 端口转发与 SOCKS 代理
- Ubuntu16.04/Scala2.11.8安装教程
- 学习PHP中的高精度计时器HRTime扩展
- 使用OpenResty+Lua实现灰度测试(金丝雀)
- 使用源码编译安装PHP扩展