PHP中的diff()和date_diff()由于某种原因无法工作
我在两个日期之间使用PHP的“PHP中的diff()和date_diff()由于某种原因无法工作,php,Php,我在两个日期之间使用PHP的“diff()”或“date\u diff()”时遇到问题。基本上,当我运行任何试图比较日期或试图将某个内容定义为日期的操作时,页面将在该点停止加载 <?php // My starting point is the $dirty_date variable. // It is collected from a string, parsed, // and ends up being an integer-based date / s
diff()
”或“date\u diff()
”时遇到问题。基本上,当我运行任何试图比较日期或试图将某个内容定义为日期的操作时,页面将在该点停止加载
<?php
// My starting point is the $dirty_date variable.
// It is collected from a string, parsed,
// and ends up being an integer-based date / seconds past Unix Epoch
//I am also including some echos along the way for debugging purposes.
echo "Check 1: ".$dirty_date."<br>";
$systemdate = date("U");
echo "Check 2: ".$systemdate."<br>";
//$interval = $dirty_date->diff($systemdate);
echo "check 3: ".$interval;
以下是一个示例
$dirty_date = new \DateTime();
$dirty_date->setTimestamp("your integer date");
echo "Check 1: ".$dirty_date->format(\DateTime::ISO8601)."<br>";
$systemdate = new \DateTime();
echo "Check 2: ".$systemdate->format(\DateTime::ISO8601)."<br>";
$interval = $dirty_date->diff($systemdate);
echo "check 3: ".$interval->format("%R%a days");
$dirty_date=new\DateTime();
$dirty_date->setTimestamp(“您的整数日期”);
echo“Check 1:”.$dirty_date->格式(\DateTime::ISO8601)。“
”;
$systemdate=new\DateTime();
echo“检查2:”.$systemdate->格式(\DateTime::ISO8601)。“
”;
$interval=$dirty\u date->diff($systemdate);
echo“检查3:”.$interval->格式(“%R%a天”);
链接到DateInterval($interval var)格式首先,$newdate
未定义。其次,$dirty\u date
必须是DateTime对象,当前它只是一个整数。我假设您想要比较$dirty\u date
和$systemdate
试试这个:
$dirty_date_obj = new DateTime();
$dirty_date_obj->setTimestamp((int) $dirty_date);
$system_date_obj = new DateTime();
$system_date_obj->setTimestamp((int) $systemdate);
echo "interval between dirty and system: ".$dirty_date_obj->diff($system_date_obj)->format('%a Days and %h hours');
另外,请在代码开头键入此项以查看错误消息,这样,如果发生错误,它就不仅仅是一个空白页:
error_reporting(E_ALL); ini_set('display_errors', '1');
->
用于对象<代码>错误报告(E_全部);ini_集('display_errors','1')代码>看起来您的$dirty\u日期只是一个整数。您需要\DateTime对象$dirty_date=\DateTime::setTimestamp($dirty_date)是一个很好的选择start@AbraCadaver谢谢我对PHP/再学习非常生疏。因此,如果我的时间/日期变量不是对象,那么如何比较它们。我也尝试过,我假设的是创建一个对象,方法是执行$variable=newdatetime($dirty\u date)代码>但这也会在此时停止页面加载。@SergeiKutanov谢谢。我尝试了$dirty\u date=\DateTime::setTimestamp($dirty\u date)代码>但是只要我点击那一行,PHP就停止加载页面。我通过评论确认了这句话。我一做完$dirty_,日期就又开始回音了。@Murila谢谢。这是一种与我一直尝试的截然不同的方式。我需要研究你在那里做了什么。它确实运行并返回:脏和系统之间的间隔:17254天和10小时。问题是,我原以为这两个约会时间可能相差几个小时。从整数到日期的转换过程中是否发生了奇怪的事情?@Mike我编辑了答案。我在$system\u date\u obj上添加了一个新行,请尝试。我用你在Check1和Check2上提供的整数测试了它,得到了0天6小时。这是你期望的结果吗?是的,6小时似乎差不多。我是从这个时候开始工作的。我对变量名做了一些更改,由于我的系统时间很混乱(出于某种原因),我需要将系统时间调整-4小时。这是我的代码。它运行。开始和结束的时间是正确的,但当它做不同的时候,它说的是45分钟,而实际上应该是360分钟左右$状态\日期->设置时间戳($dirty\日期);echo“Check 1:”.$status\u date->format(\DateTime::ISO8601)。“
”;//获取当前系统日期$systemdate=new\DateTime()$systemdate->setTimestamp(strotime(“-4小时”),strotime(date('Y-m-dh:i:s'));echo“检查2:”.$systemdate->格式(\DateTime::ISO8601)。“
”$间隔=$status\u date->diff($systemdate);回显“检查3:”.$间隔->格式(“%i分钟”)`以下是输出:检查1:2017-03-29T10:03:56+0000检查2:2017-03-29T15:50:52+0000检查3:46分钟经过一些修改,这工作正常!我的整数日期是$dirty\u date。因此,我将$dirty_date替换为“your integer date”,并将所有$dirty_date变量重命名为其他变量。我还没有研究过日期的格式,所以我需要更深入地研究你在这里做了什么。我的下一步是,我必须调整4小时的日期,但我相信我应该能够找到答案。非常感谢你的帮助!如果我的回答对你有帮助,请接受。非常感谢。