PHP - 日期与时间



PHP 的内置库包含大量函数,有助于以编程方式处理和操作日期和时间信息。PHP 中的日期和时间对象可以通过传递日期/时间信息的字符串表示来创建,也可以从当前系统的时钟创建。

PHP 提供 DateTime 类,该类定义了许多方法。在本章中,我们将详细了解 PHP 中提供的各种与日期和时间相关的可用方法。

PHP 中的日期/时间功能实现了 ISO 8601 日历,该日历实现了格里高利历之前现行的闰日规则。日期和时间信息在内部存储为 64 位数字。

使用 time() 获取时间戳

PHP 的 time() 函数提供有关当前日期和时间的所有必要信息。它不需要参数,但返回一个整数。

time(): int

time() 返回的整数表示自 1970 年 1 月 1 日格林威治标准时间午夜以来的秒数。此时刻称为 UNIX 纪元,自那时以来经过的秒数称为时间戳。

<?php
   print time();
?>

它将产生以下输出

1699421347

我们可以将时间戳转换为人类易于理解的形式。

使用 getdate() 转换时间戳

getdate() 函数可以选择性地接受时间戳,并返回一个包含日期信息的关联数组。如果省略时间戳,它将使用 time() 返回的当前时间戳。

下表列出了 getdate() 返回的数组中包含的元素。

序号 键和描述 示例
1

seconds

分钟后的秒数 (0-59)

20
2

minutes

小时后的分钟数 (0-59)

29
3

hours

一天中的小时数 (0-23)

22
4

mday

月份中的天数 (1-31)

11
5

wday

星期几 (0-6)

4
6

mon

一年中的月份 (1-12)

7
7

year

年份 (4 位数字)

1997
8

yday

一年中的天数 (0-365)

19
9

weekday

星期几

星期四
10

month

一年中的月份

一月
11

0

时间戳

948370048

现在您可以完全控制日期和时间。您可以根据需要格式化此日期和时间。

示例

请看下面的示例

<?php
   $date_array = getdate();

   foreach ( $date_array as $key => $val ){
      print "$key = $val\n";
   }
   $formated_date  = "Today's date: ";
   $formated_date .= $date_array['mday'] . "-";
   $formated_date .= $date_array['mon'] . "-";
   $formated_date .= $date_array['year'];

   print $formated_date;
?>

它将产生以下输出

seconds = 0
minutes = 38
hours = 6
mday = 8
wday = 3
mon = 11
year = 2023
yday = 311
weekday = Wednesday
month = November
0 = 1699421880
Today's date: 8-11-2023

使用 date() 转换时间戳

date() 函数返回表示日期的格式化字符串。您可以使用必须传递给它的字符串参数,对 date() 返回的格式进行大量的控制。

date(string $format, ?int $timestamp = null): string

date() 可选地接受时间戳,如果省略,则使用当前日期和时间。您在传递给 date() 的格式字符串中包含的任何其他数据都将包含在返回值中。

下表列出了格式字符串可以包含的代码:

序号 格式和描述 示例
1

a

'am' 或 'pm'(小写)

pm
2

A

'AM' 或 'PM'(大写)

PM
3

d

月份的天数,带前导零的数字

20
4

D

星期几(三个字母)

Thu
5

F

月份名称

一月
6

h

小时(12 小时制 - 带前导零)

12
7

H

小时(24 小时制 - 带前导零)

22
8

g

小时(12 小时制 - 无前导零)

12
9

G

小时(24 小时制 - 无前导零)

22
10

i

分钟 (0-59)

23
11

j

月份的天数(无前导零)

20
12

l(小写 'L')

星期几

星期四
13

L

闰年('1' 表示是,'0' 表示否)

1
14

m

一年中的月份(数字 - 带前导零)

1
15

M

一年中的月份(三个字母)

Jan
16

r

RFC 2822 格式的日期

Thu, 21 Dec 2000 16:01:07 +0200
17

n

月份(数字 - 不带前导零)

2
18

s

小时的秒数

20
19

U

时间戳

948372444
20

y

年份(两位数)

06
21

Y

年份(四位数)

2006
22

z

一年中的第几天(0 - 365)

206
23

Z

与格林威治标准时间 (GMT) 的秒差

+5

示例

请看下面的示例

<?php
   print date("m/d/y G.i:s \n", time()) . PHP_EOL;
   print "Today is ";
   print date("j of F Y, \a\\t g.i a", time());
?>

它将产生以下输出

11/08/23 11.23:08

Today is 8 2023f November 2023, at 11.23 am

希望您对如何根据您的需求格式化日期和时间有很好的理解。 作为参考,所有日期和时间函数的完整列表在 PHP 日期和时间函数 中给出。

广告