从DateTime获取错误是PHP中的错误

时间:2014-06-13 21:57:02

标签: php mysql datetime cron

每次运行我的代码时,我都会收到来自Cron的以下错误,看起来它来自DateTime是否有DateTime中的错误或我没有正确使用它。 错误中的第24行是这样的: -

$date = new DateTime($datetrue);

我在$ datetrue中给DateTime的是2014-06-13 13:00:00

  

致命错误:消息'DateTime :: __ construct()的未捕获异常'异常':无法解析位置11(2)处的时间字符串(2014-06-13 25:30:00):/中的意外字符home3 / rdkurth /的public_html / cron.php:24

     

堆栈追踪:

     

#0 /home3/rdkurth/public_html/cron.php(24):DateTime-> __ construct('2014-06-13 25:3 ...')      #1 {main}      在第24行的/home3/rdkurth/public_html/cron.php中引发。

我的代码: -

require_once("connect.php");
require_once ("function.php");
$sql = "Select
  signings.id,         
  signings.pid,
  signings.signstart,
  signings.starttime,
  remindertime.rtime,
  signings.done
From
  signings Inner Join
  profile On profile.id = signings.pid Inner Join
  remindertime On profile.emailrt = remindertime.rtid
Where
  signings.pid = 7 And
  signings.signstart = CurDate() And
  signings.done = 0";
foreach ($db->query($sql) as $signings)
 {
$signingid = $signings['id'];    
$newsub= '- ' . $signings['rtime']; // the time that needs to subtracted from the scheduled date
$datetrue =$signings['signstart'] . ' ' . $signings['starttime']; //The schedule appontment time
$date = new DateTime($datetrue);
$date = date_modify($date, $newsub);
$senddate = date_format($date, 'Y-m-d H:i'); //the date to send the remider
if ($senddate == date('Y-m-d H:i')) {

//get all the customers data to put in the message

1 个答案:

答案 0 :(得分:-1)

  1. 尝试直接使用strtotime()。我对DateTime类的体验是,它并不总是按预期行事并记录在案。另外,如果你查看关于类的php文档,不同的php版本会有很多变化。

  2. 我的第二个建议是为您的应用系统定义一个公共时区。您正在将从数据库获取的数据与您的php应用程序生成的时间值进行比较。除非您明确设置时区,否则您可能会遇到问题。 请参阅http://de2.php.net/manual/en/function.date-default-timezone-set.php

  3. 第三条建议:永远不要在构造语句中执行可能失败的操作。使用显式(成员)函数时,在大多数情况下会得到更好的错误响应。实际上,异常处理应始终是最后一道防线 - 除非您实现了程序错误处理,否则不要认为您的代码是完整的!