在我的php应用程序中,我有这段代码:
<?php echo date("d/m/ Y ",strtotime($row["m_date"]));?>
其中,$row["m_date"]
是从数据库中提取的。
问题是所有日期都打印得很完美,除了27/2/2011
。它正在打印1/1/1970
。
数据库中的日期很好,并且可以在PDF中正确打印。
答案 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
完全没有问题。
所以有两个解决方案:
dd/mm/yyyy
)。