当前位置: 首页 > 面试题库 >

在PHP和MySQL中设置时区

公良凯
2023-03-14
问题内容

我正在制作一个需要使用PHP date()函数将日期存储在MySQL中的应用程序。

<?php $finalize_at = date('Y-m-d H:i:s'); ?>

这些日期需要在MySQL中使用NOW()函数返回以小时为单位的时差进行比较,例如:

SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;

但是问题是– PHP date函数date('Y-m-d H:i:s')使用PHP时区设置,而该NOW()函数从MySQL服务器获取MySQL
timezome。

我正在尝试解决此问题:

  1. date_default_timezone_set('Europe/Paris'); 它仅适用于PHP。
  2. date.timezone= "Europe/Paris"; 它仅适用于PHP。
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); 此返回为空。
  4. mysql> SET time_zone = 'Europe/Paris'; 这从MySQL的控制台抛出错误。

而且对于MySQL,时区不会更改。

有什么方法可以更改PHP和MySQL的时区,而不必从MySQL控制台进行更改,或者从某个地方设置时区更改php.ini,并使这些值可用于PHP和MySQL。

非常感谢您的支持。


问题答案:

在PHP中:

<?php
define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);

对于MySQL:

<?php
$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

//Your DB Connection - sample
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword');
$db->exec("SET time_zone='$offset';");

现在,PHP和MySQL时区已在您的应用程序中同步。无需使用php.iniMySQL控制台!

这是来自SitePoint上的这篇文章。



 类似资料:
  • 问题内容: 我有一个XML文档,其中包含大约48,000个子级(〜50MB)。我运行INSERT MYSQL查询,为这些子项中的每个子项都创建新条目。问题是,由于其大小,它需要很多时间。执行后,我收到这个 如何将最大执行时间设置为无限制? 谢谢 问题答案: 您可以通过在您的php代码中设置set_time_limit来实现(无限制地设置为0) 或者直接在您的php.ini中修改max_execut

  • 问题内容: 如何通过MySQL和PHP 进行设置? 我的代码: 问题答案: 除了修复/ gotcha之外,还可以通过要求数据库在查询中每年仅返回一次来保存数组查找,并使代码更简单: (您可能不需要假设这是一个数字年份,但是始终将HTML模板中包含的任何纯文本都用HTML转义是一种很好的做法。您可以定义一个名称较短的函数来减少输入。)

  • 问题内容: 我正在尝试将时区系统集成到我的应用程序中,直到现在为止,我一直在努力避免制作时区感知的应用程序- 但是它是一项强制性要求,因此别无选择。TimeZones只是在我头上。我已经在PHP.net和其他站点(包括但不限于SO)上阅读了多个主题。但是我永远也无法掌握。 因此,我想知道是否有人可以在这里帮助我:(我想要做的是在我的应用程序中使用偏好选项,以允许用户从选择菜单中选择自己的时区,但是

  • 问题内容: 我正在尝试通过访问文件并更改默认的PHP时区为 至 但是,当我尝试在下查看当前时区时,时区跟随时区。 我尝试停止并重新启动Apache服务器,但是似乎并没有更改设置。 在此过程中我缺少什么吗? PS:我正在XAMPP下使用PHP 5.6.8。 问题答案: 我尝试了发布的所有其他可能的解决方案,但是都没有帮助。这是帮助我保存时区设置的原因: 1)转到页面并搜索并打开该部分下提到的文件。

  • 问题内容: 我的服务器时间是格林尼治标准时间(GMT),每当有人在线时,我都会执行以下操作。 所以,我的问题是……每当有人执行某项操作时,它都会将日期/时间存储在用户本地时间中……这给我带来了很多麻烦。 我想要的是将所有内容存储在GMT中,但要让用户在其本地时区查看数据并与之交互。 编辑: 这是我更新用户状态的方法: 这是我将日期戳转换为秒的功能。 最后,我如何比较日期: 问题答案: 这里的技巧是

  • 本文向大家介绍在MySQL中设置当前日期和时间作为时间戳,包括了在MySQL中设置当前日期和时间作为时间戳的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表。列之一设置为TIMESTAMP- 使用insert命令在表中插入一些记录。在这里,我们使用方法-将当前日期和时间设置为时间戳列- 使用select语句显示表中的所有记录- 这将产生以下输出-