PHP 将整数转换为日期,与 strtotime 相反


PHP Converting Integer to Date, reverse of strtotime

<?php
echo strtotime("2014-01-01 00:00:01")."<hr>";
// output is 1388516401
?>

如果它可以逆转,我很惊讶。我的意思是我可以convert 1388516401 to 2014-01-01 00:00:01.我真正想知道的是,这种转换背后的逻辑是什么。php 如何将日期转换为特定整数。

是的,你可以把它转换回来。您可以尝试:

date("Y-m-d H:i:s", 1388516401);

这种从日期到整数的转换背后的逻辑在 PHP 的 strtotime 中进行了解释:

该函数期望获得一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数(,相对于现在给出的时间戳,或者如果未提供现在,则为当前时间。

例如,strtotime("1970-01-01 00:00:00")给你 0,strtotime("1970-01-01 00:00:01")给你 1。

这意味着,如果您正在打印strtotime("2014-01-01 00:00:01"),这将为您提供输出1388516401,则日期2014-01-01 00:00:01是 1970 年 1 月 1 日 00:00:00 UTC 之后的 1,388,516,401 秒。

你能试试这个吗,

echo date("Y-m-d H:i:s", 1388516401);

正如theGame所指出的,

这意味着您可以传入时间的字符串值,也可以选择传入当前时间的值,即 UNIX 时间戳。返回的值是一个整数,它是一个 UNIX 时间戳。

echo strtotime("2014-01-01 00:00:01");

这将返回到值 1388516401,即日期 2014-01-01 的 UNIX 时间戳。这可以使用 date(( 函数进行确认,如下所示:

echo date('Y-m-d', 1198148400); // echos 2014-01-01

我猜你在问为什么1388516401等于 2014-01-01...?

这是有历史原因的。有一个 32 位整数变量,称为 time_t ,它保留自 1970-01-01 00:00:00 以来经过的时间计数。其值以为单位表示时间。这意味着在 2014-01-01 00:00:01 中,time_t 将等于 1388516401

这肯定会把我们引向另一个有趣的事实...... 在 2038-01-19 03:14:07 中,time_t将达到 2147485547,这是 32 位数字的最大值。听说过约翰·蒂托和2038年的问题吗?:D

time(( 函数显示从现在到 unix 纪元 01 01 1970 (00:00:00 GMT( 之间的秒数。strtotime(( 将普通日期格式转换为 time(( 格式。因此,该日期以秒表示为1388516401:

来源: http://www.php.net/time