PHP strtotime()函数没有输出

4

这是我的PHP代码:

echo '<br />1. '.$w_time_no;
echo '<br />2. '.strtotime($w_time_no);
echo '<br />3. '.date('G:i', strtotime($w_time_no));

这是我得到的内容:

1. 0000-00-00 22:00:00
2.
3. 2:00

为什么strtotime()本身不输出任何内容?服务器设置有问题吗?服务器:Apache/2.2.11 (Win32),PHP 5.2.10,MySQL客户端版本:5.0.51a。
3个回答

11

strtotime在出现错误时会返回false,而非输出任何内容。详情请参考手册

返回值

成功时返回时间戳,否则返回FALSE。在 PHP 5.1.0 之前,该函数会在失败时返回-1。

真正不输出任何内容的是echo命令:因为false被视为空字符串,因此没有任何内容被输出。

strtotime的文档还给出了有效日期范围:

注意:时间戳的有效范围通常是从 Fri, 13 Dec 1901 20:45:54 UTC 到 Tue, 19 Jan 2038 03:14:07 UTC(这些日期对应于 32 位有符号整数的最小和最大值)。另外,不是所有平台都支持负时间戳,因此您的日期范围可能被限制为 Unix 纪元之后。 这意味着例如在 Windows、一些 Linux 发行版和其他一些操作系统上,1970 年 1 月 1 日之前的日期将无法使用。但 PHP 5.1.0 及更高版本已经克服了这个限制。

'0000-00-00'不在此范围内,因此不被视为有效日期;因此返回值为false


另外,要真正知道变量内部是什么,可以使用var_dump命令。
而配合使用Xdebug,则会得到格式化良好的输出内容。


我还建议使用var_dump,因为许多开发人员甚至不知道这个函数在PHP中存在。 - Smile

7

0000-00-00不是一个有效的日期。

date()能够输出结果,因为它将输入时间解释为0,并且会根据服务器的时区进行调整。我猜date('Y-m-d H:i', strtotime(...))会输出1970-01-01 2:00。


1
进一步解释,strtotime函数返回布尔值false。尝试使用var_dump输出结果。您需要提供一个适当的字符串给strtotime函数。 - MitMaro

-2
你把strtotime()time()混淆了。 strtotime字面意思是将字符串转换为时间,它需要一个字符串来转换成时间。

成功时返回时间戳,否则返回FALSE。在 PHP 5.1.0 之前,该函数在失败时会返回-1

所以它无法验证那个时间字符串。

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