【问题标题】:MySQL DATE_FORMAT: Difference to Greenwich time formatMySQL DATE_FORMAT:与格林威治时间格式的差异
【发布时间】:2016-06-17 01:05:37
【问题描述】:

我正在尝试为 MySQL 的 DATE_FORMAT 函数找到相当于 PHP 的“与格林威治时间 (GMT) 的时差和分钟之间的冒号示例:+02:00”的日期格式。

PHP 示例:

<?php
   echo date('P');
   //+02:00

我有一个日期字段,我正在尝试将其格式化为 ISO 8601。我拥有大部分格式,但我错过了最后一部分,即“与格林威治时间的差异”又名“+00:00”。

MySQL 示例:

SELECT DATE_FORMAT(date, "%Y-%m-%dT%T) as date FROM table;
//returns  2016-03-03T16:03:01
//required 2016-03-03T16:03:01+00:00

文档链接:

http://php.net/manual/en/function.date.php

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

【问题讨论】:

  • 可能值得检查这个 SO 问题,看看它是否有帮助:stackoverflow.com/questions/805538/… - 将NOW() 替换为给定的日期,它应该工作。
  • @CD001 我的日期字段将包含过去和未来的日期,将其与 UTC_TIMESTAMP() 进行比较会给我一个正确的答案吗?
  • 嗯...好点;你很可能会得到像GMT -123449232:00 这样的胡言乱语……就我个人而言,我倾向于将数据库中的日期保留为UTC,并让应用程序根据时区来处理它;但我不确定你的最终目标是什么。
  • 我正在从 MySQL 查询中生成报告,并且我希望日期保持与我的 PHP 程序使用 $datetime->format('c'); 输出它们的格式相同;在这种情况下,在 MySQL 中格式化数据似乎更方便。但这不是一个大问题,还有其他方法可以解决它。

标签: php mysql date datetime


【解决方案1】:
【解决方案2】:

我用这个把php和mysql设置成同一个时区

    $tz = 'UTC';
    date_default_timezone_set ( $tz);
    $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);
    define('DB_TIMEZONE', $offset);
    define('PHP_TIMEZONE', $tz);

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 2011-05-13
    • 2011-10-30
    • 2013-03-10
    • 2011-07-18
    • 2010-12-02
    • 1970-01-01
    • 2012-05-21
    • 2013-06-01
    相关资源
    最近更新 更多