【问题标题】:DateTime object declaration breaks script on PHP 5.4.16DateTime 对象声明会破坏 PHP 5.4.16 上的脚本
【发布时间】:2017-12-14 20:08:26
【问题描述】:

在编辑 php 文件时,它显示 DateTime 不是一个有效的方法,而且当我尝试使用它时,它会停止加载页面的其余部分,我是否必须实现一些东西?

我的目标是检查这些变量之间的差异是否超过 3 分钟。

我可以在几分钟内输出差异吗?

$arr["etime"]来自Y-m-d H:i:s格式的mysql查询。

$etime = $arr["etime"];
$datenow = date('Y-m-d H:i:s');

$datetimenow = new DateTime($datenow);
$datetimee = new DateTime($etime);
$datedifference = $datetimee->diff($datetimenow);
echo $datedifference->format("%H:%I:%S");

如果我只是输入$date = new DateTime('2000-01-01');,它不会在此之后加载页面的其余部分。

如果我输入$datetimenow = new DateTime();,页面的其余部分将不会加载。

使用异常处理,我收到:

PHP 致命错误:未捕获的异常“异常”

带有消息:

'DateTime::__construct(): 依赖系统的不安全 时区设置。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们暂时选择时区“UTC”,但请设置 date.timezone 以选择您的时区。'

【问题讨论】:

  • 如果你只是尝试创建一个新的 DateTime,你会得到错误吗?
  • $arr["etime"] 变量中有什么内容? PHP 是否能够将其转换为日期时间值?
  • $arr["etime"] 是插入到 mysql 字段 etime date('Y-m-d H:i:s');
  • 如果我只是把 $date = new DateTime('2000-01-01');在此之后它不会加载页面的其余部分。
  • 这个$datenow = date('Y-m-d H:i:s'); $datetimenow = new DateTime($datenow);的目的是什么,为什么不只是$datetimenow = new DateTime()

标签: php datetime time php-5.4 date-difference


【解决方案1】:

您只需检查从diff() 生成的输出对象值:(Demo)

$etime = '2017-07-10 16:59:04';
$timezone=new DateTimeZone("Australia/Melbourne"); // declare whatever your timezone is
$datetimee=new DateTime($etime,$timezone);  // resultset datetime
$datetimenow=new DateTime("now",$timezone); // current datetime
$diff=$datetimee->diff($datetimenow);
//var_export($diff);
if($diff->i>=3 ||$diff->h>0 || $diff->d>0 || $diff->m>0 || $diff->y>0){
    echo "Difference is 3 minutes or more";
}else{
    echo "Difference is not yet 3 minutes";
}

如果您仍然遇到 DateTime 类的问题,可能是时候恢复到良好的'strtotime()。无论如何,它提供了更简单的代码:

if(strtotime('now')-strtotime($etime)>179){ // assuming now is always bigger than etime
    echo "Difference is 3 minutes or more";
}else{
    echo "Difference is not yet 3 minutes";
}

【讨论】:

  • $datetimenow = new DateTime($datenow);使页面的其余部分在此行之后不加载, $datenow = date('Y-m-d H:i:s'); echo "$datenow _ $escrowtime\n";工作和输出 2017-07-10 23:48:46 _ 2017-07-10 16:30:04 但是如果我把其他行放在页面的其余部分将不会加载。
  • 我不能,我的工作是在 nda 协议下,我只能说 $datetimenow = new DateTime($datenow);不起作用,而 echo "$datenow _ $etime\n";输出 2017-07-10 23:48:46 _ 2017-07-10 16:30:04。我在 $datetimenow = new DateTime($datenow); 之后注释了其余的代码。它仍然不会加载页面,在评论它并留下前 2 行时,页面会加载所有内容并且输出很好。
  • 我做了,页面的其余部分仍然无法加载,php 版本 5.4.16 (cli)
  • @StephanieSotelo 请阅读以下内容:stackoverflow.com/questions/16019126/… 并进行一些测试,看看您是否可以为我们提供任何新信息。我无法使用您提供的信息(示例输入和 php 版本)复制错误。
  • PHP 致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct():依赖系统的时区设置是不安全的。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们现在选择时区“UTC”,但请设置 date.timezone 以选择您的时区。我现在的脸就像wtf..
猜你喜欢
  • 2023-01-26
  • 2015-12-01
  • 2011-09-15
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 2019-03-01
相关资源
最近更新 更多