未捕获的异常'Exception',消息为'DateTime :: __ construct():

6
我有一个问题,无法输出在我的PHP文件中创建的日期。
我一直在跟着一个教程学习如何制作一个非常基本的CMS平台,以帮助我了解一些关于数据库PHP的基础知识,一切都进行得很顺利,直到我尝试输出页面创建的日期时出现了问题。
这是我收到的错误信息。
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. 
You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of
those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.' in 
C:\MAMP\htdocs\basic-cms\page.php:22 Stack trace: #0 C:\MAMP\htdocs\basic-cms\page.php(22): DateTime->__construct('2016-02-17 10:3...') #1 {main} thrown in C:\MAMP\htdocs\basic-cms\page.php on line 22

现在,当我删除page.php中第22行时,它会输出数据库中完整的日期,即2016-02-17 10:38:05,但我想将其格式化为像jS M, Y (17th Feb 2016)这样显示日期。这是我page.php文件中的代码。
if ( $page ) {
    $page['created'] = new DateTime( $page['created'] );

    if ( $page['updated'] ) {
        $page['updated'] = new DateTime( $page['created'] );
    }
}

然后在我展示这个内容的show.php文件中,我有以下代码来格式化日期。

Created on <?php echo $page['created']->format('jS M, Y'); ?>

现在从我的show.php中删除这个并没有任何作用,因为错误不包含在那里 - 但是我想向你们展示我正在尝试实现什么。

像我说的,这是一个非常基础的CMS网站,我是通过遵循YouTube上的教程来创建的,我已经完全复制了他的代码,他没有出现错误,所以我确定这一定是错别字,只是我找不到。


你尝试设置时区了吗? - Chetan Ameta
我该如何尝试设置时区呢?在他的教程中,我没有看到他设置过时区,除非他在开始录制视频前已经在后台完成了设置。 - Stephen
这是因为在你的致命错误中,它明确显示了与时区有关的问题。 - Chetan Ameta
1
该消息表示您有两个选项:a)设置配置选项date.timezone,例如在php.ini中,或b)在创建日期时间实例之前使用date_default_timezone_set - VolkerK
2个回答

15
这是因为在php配置中没有设置时区。请在php.ini文件顶部添加以下代码行。
date.timezone = "US/Central"

重新启动Web服务器

或者

你也可以通过使用以下函数在php脚本中设置它:

date_default_timezone_set('America/Los_Angeles');

不要忘记重新加载/重启Apache服务器。


我按照你的第一个建议完成了步骤,现在它完美运行,谢谢 :) - Stephen

0

如果您正在使用数据库来保存页面详细信息:

实际上,您可以在数据库中添加一个 DateTime 列,然后在创建页面并插入所需内容时,将该列设置为默认的 TimeStamp,它应该会自动添加页面创建的时间和日期。

然后,要从数据库中获取 TimeStamp(MySQLi 版本):

$db = mysqli_connect('host', 'user', 'pass', 'dbname');
$result = $db->query("SELECT * FROM tbl_name");
// add an error check here
while($row = mysqli_fetch_array($result)){
   if($row['columnPageID'] == 'the page ID you are on'){
       $createdOn = $row['columnName'];
   }
}
$db->close();

这段代码不会起作用,它只是为了让你理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接