php - 它是 12 :15am but my NOW() thinks it is yesterday

标签 php mysql datetime time

我在这里遇到了一个棘手的问题。我的数据库查询不准确,因为 NOW() 函数似乎有错误的时区。

首先,连接到数据库后,我使用以下代码设置了适当的时区:

ini_set('date.timezone', 'America/Toronto');

mysql_connect('localhost', 'myusername', 'mypassword') or die(mysql_error());
mysql_select_db('mydatabase') or die(mysql_error());

mysql_query("SET SESSION time_zone = 'America/Toronto'");

如您所见,我还通过 PHP 设置了时区。

问题是我正在运行以下脚本,尽管现在是凌晨 12:24,它仍在输出昨天的 SUM()

这是我使用的代码:

$sql = mysql_query("select 
    website,
    sum(case when date_format(from_unixtime(`date_assigned`), '%Y-%m-%d') = date_format(now(), '%Y-%m-%d') then 1 else 0 end) AS c_today 
    from `assignments` 
    group by website
    order by website asc
    ") or die(mysql_error());

正如我所提到的,c_today 现在正在为我提供昨天的 SUM()。它正在引起重大问题,因为计数似乎无处不在。

这是怎么回事,为什么不能正常工作?

我已尝试在此脚本中使用以下代码:

echo '<p>Current server time is: '.date('F j Y, g:ia', time()).'<br />';
echo 'Current database time is: '.date('F j Y, g:ia', mysql_result(mysql_query("select unix_timestamp(now())"), 0)).'</p>';

这个 echo 的:

Current server time is: September 10 2014, 12:28am
Current database time is: September 10 2014, 12:28am

如有任何帮助,我们将不胜感激。

编辑:

我取得了一些进步。

我在脚本中添加了以下内容:

echo mysql_result(mysql_query("select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));"), 0);

这是回显 -07:00:00,这意味着它关闭了 2 小时。如果我在连接后明确使用以下代码,为什么会关闭 2 小时?

mysql_query("SET SESSION time_zone = 'America/Toronto'");

这应该是 -05:00:00,而不是 -07:00:00

编辑 2:

似乎使用 SET SESSION time_zone 查询对实际设置 session 时区完全没有影响。

最佳答案

为了使用“美国/多伦多”设置时区,我似乎没有数据库中可用的位置字符串。这就是它不起作用的原因。

因此,我将其更改为以下代码,现在可以运行了:

mysql_query("SET time_zone = '-5:00'");

关于php - 它是 12 :15am but my NOW() thinks it is yesterday,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757320/

相关文章:

php - 使用 PHP 显示登录错误

php - Laravel 5.1 登录多社交网络,将 Socialite 插入同名字段

javascript - PHP 中包含模板时删除旧内容

php - Json 用重音编码

mysql - 与查询的输出混淆

mysql - 数据库中存储了错误的日期时间

c# - 从时区日期时间转换为短日期 C#

c# - 将 ISO 8601 格式的时间段转换为刻度/毫秒

php - 通过 API 清除最大 CDN

php - 加载 mysql 数据后继续 jQuery