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

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

如果可以反向转换,我会感到惊讶。我的意思是,我是否可以将 1388516401 转换为 2014-01-01 00:00:01

实际上我想知道的是,这种转换背后的逻辑是什么。PHP如何将日期转换为特定的整数。


9
$time = 1388516401; echo date("Y-m-d H:i:s", $time);我建议您参考date文档,此代码将时间戳格式化为"年-月-日 时:分:秒"的形式。 - Chris Forrence
1
嗯,标题不错,但问题本身毫无用处。 - Andrew
4个回答

75

是的,你可以将它转回去。你可以尝试:

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

这种将日期转换为整数的逻辑在 PHP 的 strtotime 中有解释:

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

例如,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秒。


我有一个整数-243219600,它与1962年4月18日有关。当我将其转换为date('d/m/Y', $r)时,它给出的日期是1962年4月17日 - Alaeddine
strtotime("1970-01-01 00:00:00") 只有在你的 date_default_timezone 设置为 UTC 时才会得到 0 -- strtotime 的两个参数都会考虑默认时区进行计算。 - Jordan

14

你可以试试这个,

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

正如theGame所指出的,

这意味着您传递一个时间字符串值,并可选传递当前时间的值(UNIX时间戳)。返回的值是一个整数,即UNIX时间戳。

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

这将返回值1388516401,它是2014年1月1日的UNIX时间戳。可以使用如下的date()函数进行确认:

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

4
我猜你在问为什么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位数字的最大值。听说过John Titor和2038年问题吗? :D

0

time() 函数显示当前时间与 Unix 纪元(1970 年 01 月 01 日 00:00:00 GMT)之间的秒数。strtotime() 将普通日期格式转换为 time() 格式。因此,该日期的表示形式将转换为秒数:1388516401。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接