【问题标题】:Mysql FROM_UNIXTIME converts 1st march as 28th FebruaryMysql FROM_UNIXTIME 将 3 月 1 日转换为 2 月 28 日
【发布时间】:2017-02-25 19:16:32
【问题描述】:

我正在尝试创建活动日历。所有日期都工作正常,但任何一个月的第一天都变成了上个月的最后一天。这是我的 Mysql 查询 -

查询 1-

$sql = "select  DATE_FORMAT(FROM_UNIXTIME(post_date), '%Y') as mnth,
                DATE_FORMAT(FROM_UNIXTIME(post_date), '%M') as yr 
        from ".EVENT." 
        GROUP BY (DATE_FORMAT(FROM_UNIXTIME(post_date), '%M %Y')) 
        ORDER BY(post_date) ASC limit $offset ,$limit";

循环中-

$loop="SELECT * 
       FROM ".EVENT." 
       WHERE event_status='1' 
             AND DATE_FORMAT(FROM_UNIXTIME(post_date), '%Y')=".$result['mnth']." 
             AND DATE_FORMAT(FROM_UNIXTIME(post_date), '%M')='".$result['yr']."' 
      ORDER BY(post_date) ASC" ;

【问题讨论】:

  • 您不应在内部存储的时间戳列上使用FROM_UNIXTIME。 MySQL 知道如何处理它们。 FROM_TIMESTAMP 可能存在与服务器时区相关的问题。
  • 感谢您的快速回复。如何更改服务器时区??
  • 您不需要这样做。删除FROM_UNIXTIME 是否有助于解决问题?
  • 实际上我使用 strtotime 从 php 代码中存储了日期时间。这会是个问题吗?
  • 好吧 strtotime 返回自 1/1/1970 00:00:00 UTC 以来经过的秒数(因此没有时区问题),但是它假定输入与默认的 PHP 时区(不是服务器时间)匹配,所以调用时要小心。

标签: php mysql unix-timestamp


【解决方案1】:

通过检查 mysql 设置时区,我发现它是在 MST 中设置的,并且我将所有日期都存储为 UTC 格式。为了解决这个问题,我只需将我的默认时区 UTC 转换为 MST,它就解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多