【问题标题】:PHP DateTime Error| date_create() [function.date-create]: It is not safe to rely on the system's timezone settingsPHP 日期时间错误| date_create() [function.date-create]:依赖系统的时区设置是不安全的
【发布时间】:2017-12-03 09:18:15
【问题描述】:

我在将日期发布到我的数据库以在我重新加载页面时检索它时遇到问题。我希望它自动为最后一个条目添加时间戳。

<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Location Tracker</title>
    </head>
    <body>

    <hl> ACW Location Tracker </hl>

<?php
    $server = 'SQL2008.net.dcs.hull.ac.uk';

    $connectionInfo = array("Database"=>"rde_531545");
    $conn = sqlsrv_connect($server,$connectionInfo);
    $query='create table Location ';
    $query .= '(Username int NOT NULL IDENTITY(500, 23), First_Name varchar(50) NOT NULL, Surname varchar(50) NOT NULL, Current_Location varchar(50) NOT NULL, Date datetime NOT NULL, PRIMARY KEY (Username))';
    $result = sqlsrv_query($conn, $query);

    if (!$result)
    {
      if( ($errors = sqlsrv_errors() ) != null)
      {
         foreach( $errors as $error ) {
           echo "<p>Error: ".$error[ 'message']."</p>";
         }
      }
    }
    else {
      echo "<p>DB successfully created</p>";
    }
    sqlsrv_close($conn);

    $connectionInfo = array( "Database"=>"rde_531545");
    $conn = sqlsrv_connect($server,$connectionInfo);
    $insert_query = "INSERT INTO Location (First_Name, Surname, Current_Location, Date) VALUES (?, ?, ?,? )";
    $params = array("John","Doe","Hull", Date);
    $result = sqlsrv_query($conn,$insert_query,$params);
    $params = array("Jane","Doe","Hull", Date);
    $result = sqlsrv_query($conn,$insert_query,$params);

    $LocationQuery='SELECT Username, First_Name, Surname, Current_Location, Date FROM Location';
    $results = sqlsrv_query($conn, $LocationQuery);
    if ($results) while($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC))
    {
       echo '<p>'.$row['Username'].' '.$row['First_Name'].' '.$row['Surname'].' '.$row['Current_Location'].' '.$row['Date'].'</p>';
    }
?>
    </body>
</html>

我得到的错误是:

注意:使用未定义的常量 Date - 在 C:\RDEUsers\NET\531545\Location.php 在第 44 行

警告:date_create() [function.date-create]:依赖是不安全的 在系统的时区设置上。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。在 如果您使用了enter code here 中的任何一种方法,但您仍然 收到此警告,您很可能拼错了时区 标识符。我们在第 49 行的 C:\RDEUsers\NET\531545\Location.php 中为 '0.0/no DSTenter code here' 选择了 'Europe/London'

可捕获的致命错误:无法转换类 DateTime 的对象 在第 51 行的 C:\RDEUsers\NET\531545\Location.php 中字符串

【问题讨论】:

    标签: php date datetime


    【解决方案1】:

    您发送的是 Date 类,而不是发送字符串“2017-02-03”。

    错误在$params = array(....., Date);

    在这段代码的第二行:

    $insert_query = "INSERT INTO Location (First_Name, Surname, Current_Location, Date) VALUES (?, ?, ?,? )";
    $params = array("John","Doe","Hull", Date);
    

    你需要创建一个日期对象$date = new DateTime(); 在查询中,您需要从中提取字符串,使用format 函数:

    $dateStr = $date->format(''Y-m-d H:i:s'');
    

    然后,在您的参数中使用 $dateStr:$params = array("John","Doe","Hull", $dateStr);


    编辑 1:

    $date = new DateTime();
    $dateStr = $date->format('Y-m-d H:i:s');
    $params = array("John","Doe","Hull", $dateStr);
    

    【讨论】:

    • 嗨,我已经开始尝试这样做,但我仍然不太明白你的意思,我才刚刚开始学习这个。我到底要把这个放在哪里: $date = new DateTime();和 $dateStr = $date->format(''Y-m-d H:i:s'');.
    • 请勿将Date 放入您的$params。您应该首先创建一个dateTime 对象,然后通过format 方法使用它来获取日期字符串。请查看我在编辑 1 下的答案中添加的代码:
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 2011-08-07
    • 2012-09-14
    • 2015-07-13
    • 2011-03-20
    • 2011-01-13
    • 2016-07-22
    相关资源
    最近更新 更多