我有一个带有时间戳字段的mySQL数据库。它在我测试时目前只有一个条目,它是
2010-02-20 13:14:09
我从数据库中取出并使用
echo date("m-d-Y",$r['newsDate'])
我的最终结果显示为
12-31-69
任何人都知道为什么?
编辑: editedit: 无视编辑...记事本++的FTP插件超时,不幸的是,当它无法同步时不显示错误。
答案 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)
分别
我希望这可以帮助别人......