我知道这已经被问到了,但我也找不到正确答案,因为我的问题有点不同。
我有一个用php编写的带有mysql的web应用程序。在过去的几年里,一切都运行良好,直到几天前我将应用程序移动到一个性能最佳的服务器,源和数据库。一切顺利,但不是在这个日期的情况下。
错误的日期保存在0000-00-00
的mysql表中,但是当我显示它时显示为30/11/-000
如何摆脱这个?我仍然有旧的工作服务器,所以我可以检查mysql或PHP配置。我认为问题很简单,因为配置参数,但我找不到合适的参数。
这是用于检索日期的片段。这不是我的代码,也不能向原始开发者询问,你能解释一下为什么检查日期是否为30/11/1999?似乎谷歌说的一个常见问题,我认为是参与其中。
function getDataF($data){
if (($stadata = strtotime($data)) == -1 || $stadata === false) {
return "";
}
$return = date("d/m/Y",$stadata);
if ($return == "30/11/1999") return "";
return $return;
}
答案 0 :(得分:2)
30/11/1999
时, strtotime返回00-00-00 00:00:00
。 Code Pad here。这解释了为什么开发人员检查日期是否为30/11/1999并在这种情况下返回空白。
关于为什么0000-00-00
日期显示为31/11/-000
:似乎strtotime函数中存在一个错误(或“特性”),它为某些PHP版本返回-0001
年份({ {3}})。因此,对于无效日期,日期会生成31/11/-0001
。我猜显示日期的代码会从最后删除一个字符,因为它预计年份为4位数。
答案 1 :(得分:0)
首先,在你的if
陈述中没有任何内容停止脚本(假设你的意图是这样),所以无论什么$return
,无论如何都会输出。
如果满足您的某个条件,您需要一些else
语句或某些exit()
或die()
函数来停止列车。
此外,您的第一个条件是在$stadata
运算符之后调用变量||
,然后再定义它。为什么你还需要这个额外的变量?只测试$data
是否存在。另外,您需要进一步解析您的输入。
如果您以后不需要$stadata
,请执行以下操作:
function getDataF($data){
if (!$data) {
return "";
}
else
{
$return = date("d/m/Y", strtotime($data));
if ($return == "30/11/1999") {
return "";
}
else
{
return $return;
}
}
}
这是快速而肮脏的,不是最有效的写作方式,但会完成这项工作。
答案 2 :(得分:0)
您可能已经从32位服务器迁移到64位服务器。
strtotime仅在32位服务器上正常工作。手册说
strtotime('0000-00-00 00:00:00')
根据您的时区返回31/11/-000
。
如果将代码移动到64位服务器并进行此检查,原始开发人员可能希望涵盖此案例。