PHP strtotime已关闭一天

时间:2014-05-14 15:58:39

标签: php mysql timestamp unix-timestamp strtotime

//Convert string to unix timestamp
strtotime( "04/05/2014" );

//Insert into database, convert from unix timestamp first
$sql = "INSERT INTO database ( date ) VALUES ( FROM_UNIXTIME(:date) )";

我希望2014-04-04 15:00:00

将其保存到数据库2014-04-05 00:00:00

我做错了什么?

2 个答案:

答案 0 :(得分:4)

date_default_timezone_set('America/Los_Angeles');

因为这套你的 时区,它会起作用

<小时/> 享受:)

答案 1 :(得分:3)

Unix时间戳是固定的时刻。但是,MM / DD / YYYY日期是依赖于时区的相对数据。

执行此操作时:

strtotime( "04/05/2014" );

...您告诉PHP计算与PHP时区中的午夜相对应的时间戳。然后你这样做:

FROM_UNIXTIME(:date)

...告诉MySQL计算与时间戳对应的本地时间(关于MySQL时区)。因此转变。


SQL中的时区转换很困难,所以我会不惜一切代价避免它们。我用一个已包含适当本地时间的字符串为MySQL提供信息,例如:2014-04-052014-04-05 00:00:00。该字符串很容易从PHP计算。

关于PHP,要么明确设置时区:

$ts = strtotime( "04/05/2014 +02:00" );

...或根据自己的喜好调整默认区域:

date_default_timezone_set('Europe/Madrid');

我还建议您熟悉DateTime类 - 它比旧的时间戳更强大。