将时间戳转换为日期时间后返回 - 差异来自何处?

时间:2014-10-01 14:30:09

标签: php mysql datetime timestamp

因为使用时间戳可以在mysql中获得更好的性能,所以我希望将时间保存为数据库中的时间戳。我收到这样的日期时间字符串:2014-09-24 17:18:27,将其转换为strtotime($the_date_from_above)的时间戳,只是为了好玩,我将其转换回date("Y-m-d H:m:s", strtotime($the_date_from_above))

我var_dumped过程:

string(19) "2014-09-24 17:18:27"
int(1411579107)
string(19) "2014-09-24 17:09:27"

字符串转换期间出了什么问题?是什么导致了这种差异?这是相同的秒数,但9分钟的差异是奇怪的。

3 个答案:

答案 0 :(得分:7)

您需要将其转换回来:

date("Y-m-d H:i:s", strtotime($the_date_from_above))

当您按照自己的方式对其进行转换时,m中的H:m:s会被视为月份。

更好的是使用datetime类:

$date = new DateTime();
$date = $date->setTimestamp($yourtimestamp);
echo $date->format("Y-m-d H:i:s");

答案 1 :(得分:1)

date("Y-m-d H:m:s", strtotime($the_date_from_above))
        ^-----^---

你使用m两次,这是MONTHS值。分钟实际上是i

答案 2 :(得分:0)

您只需使用错误的日期时间模板" Y-m-d H:m:s"应该是" Y-m-d H:i:s"。小错误。

但我不明白的是你这样做的理由。因为MySql具有用于保存日期时间值的正确列类型,并且类型时间戳通常用于其他目的。

为了获得更好的性能和精度,如果要将值用于下一次计算,可以将数据库中的值保存为字符串。 (表示带有毫秒的时间戳)