繁体   English   中英

PHP的:设置日期的时区

[英]PHP : Setting timezone for date

我节省了php的登录时间。 这就是我用来为每次登录节省价值的方式

$update= mysqli_query($connection, "UPDATE employees set loggedin= now() WHERE email = '$email'");       

当我从中获得价值时

  $logintime_query=  mysqli_fetc h_assoc($logintime);
  $loggedin_time_converted= explode(" ",$logintime_query) ;       

  $converted_time= $loggedin_time_converted['0'];
  $converted_date= $loggedin_time_converted['1'];

现在我必须将此日期与今天的日期进行比较,以获取我正在使用的今天的日期

$today=  $_SERVER['REQUEST_TIME'];
echo(date("Y-m-d",$today));

现在的问题是$_SERVER['REQUEST_TIME]给我这个日期

2015-12-21

当我使用NOW()输入日期并从数据库中检索日期时,这就是我得到的

2015-12-20

是时区问题还是什么? 我的时区是utc + 4(迪拜),所以我尝试将其设置为

date_default_timezone_set('Asia/Dubai');

但这对某些人无效,请帮助我解决这个问题

时区既复杂又混乱。 例如,在这里,您的问题不仅与PHP时区设置有关,而且与MySQL时区有关,因为您要在此存储时间戳并尝试在PHP中再次使用它们。

输入Unix时间戳进行传输

更好地,更有效地传输所有这些时间戳,以便从MySQL到PHP或PHP到MySQL或PHP到Javascript或Javascript到PHP时,不必担心时区转换,就是使用Unix时间戳。到处都需要时间。

$logintime =  mysqli_query("SELECT UNIX_TIMESTAMP(loggedin) as loggedin FROM employees WHERE email = 'josh@foobar.baz'");

现在,当您想在PHP中进行比较时,您只需...

if ($logintime['loggedin'] > time()) {
    /* ... do stuff ... */
}

从PHP返回MySQL很简单...

$t = time();
$logintime =  mysqli_query("UPDATE employees SET loggedin = FROM_UNIXTIMESTAMP($t) WHERE email = 'josh@foobar.baz'");

这比担心您是否已在各个地方正确设置时区并希望您在此期间未在某个地方犯一个简单的错误而导致以后的结果混乱要方便得多。

我建议您仅使用time()函数。 这里

如果您设置了date_default_timezone_set('Asia/Dubai'); 在使用time()之前,它应该工作。

未经测试。

是的,应该是时区问题。 您的mysql服务器的时区是多少?

您可以使用

default_time_zone='+04:00'

在mysqld的mysqld部分中。

或使用以下sql语句:

SET @@global.time_zone='+04:00';

另外请注意,$ _ SERVER ['REQUEST_TIME]是网络服务器开始处理您的请求的时间。 使用php的date()函数应该更准确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM