时区使用UNIX时间,PHP,MySQL发行



我昨晚花了8个小时来检查所有文档,浏览各种帖子等,我几乎解决了我的问题,但是我缺少一些我无法理解的stil。

i有一个表,该表存储了带有UNIX时间戳(例如1351867293)的各种用户提交的表。我正在提取此信息并计算它,以便获得"今日","昨天","本周"等提交的总数。

我正在使用的代码(对于"今天的提交")是:

WHERE DATE(from_unixtime(comment_date)) = CURRENT_DATE";

到目前为止还不错,但是有一个时间偏移,并且数据未正确显示。stackoverflow上的用户建议使用convert_tz,以使偏移固定。

这是我被卡住的点。我位于CST时区,我的服务器似乎位于EST时区。所以我使用了此代码

 WHERE DATE(CONVERT_TZ(from_unixtime(comment_date), 'EST', 'CST')) = CURRENT_DATE";

...但结果仅显示我的" 0",尽管我今天提交了提交的内容。我尝试了不同的时区,但结果它们都给了我" 0"。当我用数字替换EST和CST时,例如:

 WHERE DATE(CONVERT_TZ(from_unixtime(comment_date), '+00:00', '+07:00')) = CURRENT_DATE";

...我得到了一个数字输出,但是数字不正确。我尝试了很多组合,包括 08:00,-05:00,但似乎无效。

基本上我要问的是我必须将这两个数字作为正确的结果来获得正确的结果?我网站上的其他所有内容都可以在我的时区(CST)中正确显示,我在此查询中只有问题。

如果有帮助,我的服务器的IP为50.116.13.130。

unix时间戳始终位于UTC中,因此您的服务器设置了哪个时区。

但是,您必须确保使用正确的时区(

)转换" comment_date"字符串表示形式:
// Use the timezone you are in (CST). If you're having user
// submissions from all over the world, use the timezone
// from where the submission came from.
$timezone = new DateTimeZone("CST"); 
$date = new DateTime("2012-01-02", $timezone);
$unixTimestamp = $date->getTimestamp();

另一个重要的事情是注意" 2012-01-02"将转换为" 2012-01-02 00:00:00"。和" 2012-01-02 00:00:00"!=" 2012-01-02 04:03:27"。

所以当您想要今天的日期时,您应该查询间隔。

$today = new DateTime(); // Get current time
$today->setTimezone(new DateTimeZone("CST"));
$today->setTime(0,0,0); // Set time to midnight of today (depends on your definition of today, could also be -24h
$sql = "[..] WHERE comment_date > ".$today->getTimestamp();

我最终通过使用

解决了它
  $timezone1 = '+12:00';
  $timezone2 = '-04:00';

 DATE(CONVERT_TZ(from_unixtime(comment_date), '$timezone1', '$timezone2')) = CURRENT_DATE"; 

为了使我的8小时时间差异。它可以使用,尽管我的服务器时间在UTC( 0小时),并且输出应在CST( 8小时)中。所以基本上

  $timezone1 = '+00:00';
  $timezone2 = '+08:00';

应该给我带来所需的结果,但事实并非如此。我不知道为什么,但是我很高兴我的第一句代码现在有效。

请注意,除非您使用JavaScript,否则您的位置不是很重要。重要的是服务器位置。因此,如果您在CST中,并且您的服务器在EST中,那么所有操作的时间都将在EST中,因为PHP是服务器端。

我认为最好的方法是使用UTC时间。您使用以下方式将服务器重置为UTC:

date_default_timezone_set("UTC");

设置了UTC后,您的所有时间现在都重置为从UTC转移0,并且更容易处理。我个人使用以下功能在PHP和MySQL日期之间切换

$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );

但是,您可以使用时间戳。本文可能会为您提供一些答案

我不确定我会回答您的问题,但我希望这些是适合您的指针。

欢呼。

相关内容

  • 没有找到相关文章

最新更新