Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的diff()和date_diff()由于某种原因无法工作_Php - Fatal编程技术网

PHP中的diff()和date_diff()由于某种原因无法工作

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

我在两个日期之间使用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 / 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小时的日期,但我相信我应该能够找到答案。非常感谢你的帮助!如果我的回答对你有帮助,请接受。非常感谢。