每次运行我的代码时,我都会收到来自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
答案 0 :(得分:-1)
尝试直接使用strtotime()。我对DateTime类的体验是,它并不总是按预期行事并记录在案。另外,如果你查看关于类的php文档,不同的php版本会有很多变化。
我的第二个建议是为您的应用系统定义一个公共时区。您正在将从数据库获取的数据与您的php应用程序生成的时间值进行比较。除非您明确设置时区,否则您可能会遇到问题。 请参阅http://de2.php.net/manual/en/function.date-default-timezone-set.php
第三条建议:永远不要在构造语句中执行可能失败的操作。使用显式(成员)函数时,在大多数情况下会得到更好的错误响应。实际上,异常处理应始终是最后一道防线 - 除非您实现了程序错误处理,否则不要认为您的代码是完整的!