php中的日期问题

时间:2011-03-09 08:20:15

标签: php mysql

在我的php应用程序中,我有这段代码:

<?php echo date("d/m/ Y ",strtotime($row["m_date"]));?>

其中,$row["m_date"]是从数据库中提取的。

问题是所有日期都打印得很完美,除了27/2/2011。它正在打印1/1/1970

数据库中的日期很好,并且可以在PDF中正确打印。

4 个答案:

答案 0 :(得分:5)

我假设您从数据库中获取日期为字符串27/2/2011,因为这很可能发生了什么(如果我错了,请纠正我)。

PHP将字符串27/2/2011视为m/d/Y格式,而不是d/m/Y,并尝试在该假设下进行解析。由于日期在该格式下无效strtotime会返回false。将false作为date的时间戳参数设为0,这是1970年1月1日的时间戳。

您需要做的是从数据库获取另一种格式的日期(或者更好,作为时间戳),或者自己解析(比如使用explode)。

祝你好运,
阿林

答案 1 :(得分:4)

数据库应该能够将日期作为UNIX时间戳返回给您。例如,MySQL具有UNIX_TIMESTAMP()函数。

SELECT UNIX_TIMESTAMP(date_column) FROM table;

Postgres有date_part

SELECT DATE_PART('epoch', date_column) FROM table;

大多数其他数据库应该具有类似的功能。如果您可以将日期作为UNIX时间戳记输出,则可以将其直接传递给date(),而不必使用strtotime()。

所有这一切当然都假设您正在使用临时数据类型来处理相关列(时间戳,日期时间,带时区的时间戳等),而不仅仅是存储字符串。你正在使用临时类型,对吗?如果没有,那为什么不呢?

答案 2 :(得分:1)

如果您将日期作为时间戳存储在数据库中,这应该可以正常工作

<?php echo date("d/m/Y",$row["m_date"]);?>

如果您将日期作为日期或日期时间存储在数据库中,则该工作

<?php echo date("d/m/Y",strtotime($row["m_date"]));?>

答案 3 :(得分:0)

m_date如何存储在数据库中?它是一个日期时间对象吗?或者一个字符串。 strtotime的问题在于它破译书面日期并不是很好。因此27/2/2011之类的问题会产生问题,27/02/2011完全没有问题。

所以有两个解决方案:

  1. 确保输入数据库的所有日期格式正确(dd/mm/yyyy)。
  2. 编写一个正则表达式,为所有单个字符添加前导零。