【问题标题】:November 30 -0001 returned on timestamp11 月 30 日 -0001 返回时间戳
【发布时间】:2011-10-20 21:28:59
【问题描述】:

在有人说之前,我检查了其他类似的问题,但无济于事。基本上,我从我的数据库中获取时间戳并显示它,这是检索代码:

while($row = mysql_fetch_array($result)) {
    $timestamp = date("l F d Y", strtotime($row['timestamp']));
}

这是提交时的代码:

$sql = "INSERT INTO mysql_table (timestamp) VALUES (now())";

我认为这将是一个简单的格式错误(因此是 strtotime),但正如您所见,这不起作用:http://aviatex14.co.uk/anonpost/index.php

我可以改成:

$date = date("l F d Y", $row['timestamp']);

并获得 1969 年 12 月 31 日,但这也不是很有帮助..

哦,我的列数据类型是日期时间。

任何帮助将不胜感激! :)

【问题讨论】:

  • 正如@bumperbox 所说,$row[timestamp] 可能不正确——我的猜测是 0,因为 1969 年 12 月 31 日 = Unix 纪元(无论如何都是 UTC 以西)

标签: php mysql date time


【解决方案1】:

你必须在timestamp这个词周围加上反引号,因为这是一个保留字。

 "INSERT INTO mysql_table (`timestamp`) VALUES (now())";

【讨论】:

  • 你是对的,var_dump 返回:string(19) "0000-00-00 00:00:00"
  • 您可能必须在时间戳一词周围加上反引号。我已经修改了答案,因为我无法在 cmets 中显示反引号
  • 立即工作。谢谢。
  • @LanceRoberts 你为什么编辑这么多,它显示了症状与解决方案的关系
  • @bumperbox,因为你之前问过问题(应该在评论中)。如果您认为其中的某些内容是相关的,欢迎您重新编辑它,但对我来说似乎不是这样。
【解决方案2】:

如果你打算在 PHP 中进行日期格式化,那么只需从 MySQL 中获取一个 UNIX_TIMESTAMP,它可以直接用作 PHP 时间戳:

SELECT UNIX_TIMESTAMP(`timestamp`) FROM  ...

您的date(... $row['timestamp']) 失败,因为 date() 函数需要一个 TIME VALUE,这只是一个 unix 时间戳 - 您传递的是日期的字符串表示形式,它很可能会转换为 0,这是 1970 年 1 月 1 日 00:00,然后针对时区进行了调整,因此您会得到 69 年 12 月 31 日。

【讨论】:

    【解决方案3】:

    问题是php使用了UNIX_TIMESTAMP,与MySQL的日期时间格式不匹配。

    随便

    SELECT date_format(`timestamp`,aformatstring, see link) as formateddate_as_string
    

    或者做

    SELECT UNIX_TIMESTAMP(`timestamp`) as php_friendly_timestamp 
    

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

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2011-02-02
      • 2022-01-14
      相关资源
      最近更新 更多