在PHP中处理日期和时间非常方便,它提供了Date和DateTime两个类来分别处理日期和日期以及时间。本文将主要介绍DateTime类,并且重点探讨DateTime格式化。
DateTime类对于日期和时间的操作非常灵活,你可以用各种形式表示一个时间,比如:
$date1 = new DateTime(); // 创建当前时间 $date2 = new DateTime("now"); // 与上面的方式一样,创建当前时间 $date3 = new DateTime("2021-06-01"); // 创建一个指定日期的时间 $date4 = new DateTime("2021-06-01 19:15:16"); // 创建一个指定日期和时间的时间
当然,以上仅仅是DateTime类实例化的几个常见用法,实际上,它有很多种方法可以接收各种类型的时间。下面我们来看看日期时间的格式化。
为了方便表述,我们使用以下时间作为示例,2021年6月1日19点15分16秒:
$date = new DateTime("2021-06-01 19:15:16");
在DateTime类中,对于时间格式化有一个常见的方法format(),可以用来返回一个格式化后的时间字符串。下面是一些常见的日期格式化的例子:
$date->format("Y-m-d"); // 2021-06-01 $date->format("H:i:s"); // 19:15:16 $date->format("Y/m/d H:i:s"); // 2021/06/01 19:15:16 $date->format("l"); // Tuesday $date->format("M"); // Jun $date->format("F"); // June $date->format("jS F Y h:i:s A"); // 1st June 2021 07:15:16 PM $date->format("Y-m-d H:i:s T"); // 2021-06-01 19:15:16 UTC
在上面的例子中,我们使用了一些常见的时间格式化字符,如Y, m, d, H, i, s等。这些字符分别表示年,月,日,时,分,秒等,具体的含义可以查看DateTime类手册。
除了以上的格式化字符,DateTime类还支持一些特殊格式化字符,比如:
- e – 时区标识
- O – 与格林威治时间的差值,不含冒号,如+0800
- P – 与格林威治时间的差值,含冒号,如+08:00
- T – 时区标识,如UTC,EST等
- c – ISO 8601格式,如2011-12-31T01:01:01+00:00
- r – RFC 2822格式,如Tue, 13 Aug 2019 17:03:00 +0800
- U – Unix时间戳
下面是使用以上特殊格式化字符的实例:
$date->format('e'); // UTC $date->format('O'); // +0800 $date->format('P'); // +08:00 $date->format('T'); // UTC $date->format('c'); // 2021-06-01T19:15:16+00:00 $date->format('r'); // Tue, 01 Jun 2021 19:15:16 +0000 $date->format('U'); // 1622553316
最后,需要特别注意的是,DateTime类在进行转化时,需要注意时区。默认情况下使用的是UTC时区,如果需要进行本地化的时间转化,需要先设置时区。比如:
$date->setTimezone(new DateTimeZone('Asia/Shanghai')); // 将时区设置为中国
这是DateTime类中比较常见的一些用法,当然还有很多的方法和技巧,需要使用时请参考相关文档。总之,对于PHP时间处理这一块,DateTime类是一个非常强大的类,可以满足绝大多数的时间处理需求。