PHP 日期和时间
在本教程中,我们将学习如何使用一些有用的PHP日期和时间函数来处理日期和时间。
UNIX时间戳简介
计算机系统将日期和时间存储为UNIX时间戳,或者只是时间戳。时间戳是一个整数,它表示要存储的日期和时间与1970-01-01 00:00:00 UTC之间的秒数差。
计算机将日期和时间存储为时间戳,原因如下:
- 首先,计算机更容易存储整数。
- 其次,它更容易操作。例如,要向时间戳添加一天,它只添加相应的秒数,即24x60x60 = 86400秒。
- UNIX时间戳是与时区无关的。这意味着如果您在不同时区的不同计算机上同时计算时间戳,您将得到相同的值。
PHP提供各种直接操作时间戳的日期和时间函数。
PHP获取当前日期和时间
要获取web服务器的当前日期和时间,可以使用time()函数,如下所示:
<?php echo time(); //1573133576
time()以时间戳的形式返回当前时间,因此不方便阅读。幸运的是,PHP提供了几个函数来帮助您将时间戳格式化为人类可读的字符串。
可以使用date()函数将时间戳格式化为指定格式的日期和时间字符串,如下所示:
<?php echo date("F j, Y, g:i a",time()); // December 26, 2017, 12:15 pm
date()函数的第二个参数的默认值是当前的日期和时间,因此可以忽略它,如下所示:
<?php echo date("F j, Y, g:i a");
PHP创建时间戳
PHP提供了一些有用的函数来创建时间戳。以下是常用的函数:mktime()、gmmktime()和strtotime()。
从日期和时间值创建时间戳
mktime()函数基于最多6个参数来返回时间戳:年份(19xx)、月份(1-12)、日(1-31)、小时(0-24)、分钟(0-59)和秒(0-59)。
下面的例子显示了1970年1月1日凌晨1:30的时间戳:
<?php echo mktime(1,30,0,1,1,1970); // 5400
要从GMT日期和时间创建时间戳,可以使用gmmktime()函数。
<?php echo gmmktime(1,30,0,1,1,1970); // 5400
mktime() 和 gmmktime() 比较
两个函数都是根据相同的输入参数返回UNIX时间戳。
但是,mktime()函数返回一个指定时区的值,而gmmktime()函数返回任何地方都相同的时间戳。
从日期和时间字符串中创建时间戳
PHP提供了strtotime()函数来将日期和时间字符串转换为时间戳,这在某些情况下非常有用。
使用strtotime()函数,您可以传递几乎任何人类可读的格式,例如
<?php echo strtotime("now"), "\n"; echo strtotime("10 September 2000"), "\n"; echo strtotime("+1 day"), "\n"; echo strtotime("+1 week"), "\n"; echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; echo strtotime("next Thursday"), "\n"; echo strtotime("last Monday"), "\n"; echo strtotime("2nd September 1990 12:00pm"), "\n"; ?>
PHP从时间戳获取日期和时间
要从时间戳获取日期和时间值,可以使用getdate()函数。它将返回一个包含日期和时间值的关联数组。
timestamp参数的默认值是现在或者time()函数的结果。
让我们看下面的例子:
<?php var_dump(getdate());
输出:
array(11) { ["seconds"]=> int(44) ["minutes"]=> int(34) ["hours"]=> int(12) ["mday"]=> int(26) ["wday"]=> int(4) ["mon"]=> int(12) ["year"]=> int(2018) ["yday"]=> int(359) ["weekday"]=> string(8) "Thursday" ["month"]=> string(8) "December" [0]=> int(1571334884) }
下面的例子使用了getdate()函数来显示UNIX时间
<?php $ts = strtotime('1 January 1970'); $unix_time = getdate($ts); echo sprintf(" Unix 时间, 或者 POSIX 时间, 是 %d.%d.%d", $unix_time['year'], $unix_time['mon'], $unix_time['mday']);