使用PHP格式化SQL时间戳

时间:2010-02-20 21:05:40

标签: php mysql date timestamp

我有一个带有时间戳字段的mySQL数据库。它在我测试时目前只有一个条目,它是

2010-02-20 13:14:09

我从数据库中取出并使用

echo date("m-d-Y",$r['newsDate'])

我的最终结果显示为

12-31-69

任何人都知道为什么?

编辑: editedit: 无视编辑...记事本++的FTP插件超时,不幸的是,当它无法同步时不显示错误。

6 个答案:

答案 0 :(得分:50)

date函数需要UNIX timestamp作为其第二个参数 - 这意味着您必须将从数据库获取的日期转换为UNIX时间戳,这可以使用{{3}完成}:

$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);

你会得到:

02-20-2010


您正在将'2010-02-20 13:14:09'字符串传递给date函数;该字符串不是有效的UNIX时间戳。

在你的语言环境中,

'12-31-69'可能是1970-01-01;而1970-01-01是Epoch - 与0 UNIX时间戳对应的日期。

答案 1 :(得分:4)

对于初学者来说,php date()函数期望秒为第二个变量。因此,说明您的日期显示错误的原因。在此问题上查看此source

然后它为我们提供了问题的答案,让PHP正确地从SQL时间戳格式化日期,我们只是改变查询... ...

SELECT author, `when`

将其更改为...

SELECT author, UNIX_TIMESTAMP(`when`)

然后使用PHP日期函数,使用存储上述SQL查询结果的变量。

答案 2 :(得分:1)

您可以使用MySQL的date_format()函数代替:

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....

这将节省您必须将时间戳往返到unix时间,然后再回到PHP中的正常日期字符串。一个日期时间格式化调用而不是两个。

答案 3 :(得分:1)

我认为这对新人有用:

示例基本减法从MYSQL格式起1小时:

$to='2013-25-10 22:56:00'; //curr time
$timestamp = strtotime($to); //convert to Unix timestamp
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds)
echo date("Y-m-d H:i:s",$timestamp); //show new date

答案 4 :(得分:0)

编辑:检查后,似乎MySQL将一个timestamp作为字符串返回给PHP,所以这个答案是伪造的:)

无论如何,你在1969年获得约会的原因可能是你将零unix时间从UTC转换为本地时间。 unix时间是自1970年以来的秒数。所以值为0意味着1970.你可能生活在一个带有负偏移的时区,比如GMT-6,最终是31-12-69。

答案 5 :(得分:0)

好吧,我正在和它摔跤一个星期(更长的时间,但我休息了一下)。

我在表格中有两个特定字段

creationDate > timestamp > current_timestamp
editDate > timestamp > current_timestamp
他们在1969年12月31日退出,或者什么都没有......烦人......非常讨厌

在mysql查询中我做了:

            unix_timestamp(creationDate) AS creationDate
            unix_timestamp(editDate) AS editDate

在php转换中我做了:

    $timestamp = $result_ar['creationDate'];
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp)
            echo($creationDate);

    $editstamp = $result_ar['editDate'];
    $editDate = date("Y-M-d (g:i:s a)", $editstamp)
            echo($editDate);

这解决了我回来的问题

            2010-Jun-28 (5:33:39 pm)
            2010-Jun-28 (12:09:46 pm)

分别

我希望这可以帮助别人......