PHP 日期和时间

时间:2018-11-15 15:05:45  来源:igfitidea点击:

在本教程中,我们将学习如何使用一些有用的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']);