我今天无法获得时间戳

时间:2015-09-15 06:09:11

标签: php timestamp

我正在尝试为我的某个程序创建一个甘特图模块。问题是我使用timestamp来存储数据库中的时间。这是问题所在:

<?php
$now=time();
echo date('s:i:H d/m/y',$now); //returns: 22:51:07 15/09/15
echo '<br>';
echo $now; // returns: 1442296282
echo '<br>';
echo $now%86400; // returns: 21082
echo '<br>';
echo $today=$now-($now%86400); 
// so I Subtract modulated diffrence so that I can access 0:0:0 for today
echo '<br>';
echo date('s:i:H d/m/y',$today);
//returns: 00:00:02 15/09/15
echo '<br>';
echo mktime(0,0,0,9,15,2015); // (timestamp for today at 0:0:0)returns:1442268000
?>

我知道方式,我知道如何在没有这种基本方式的情况下今天可以访问0:0:0的时间戳。 (虽然知道更好的方法会很棒)但是这个问题的主要建议是要知道这个逻辑或算法的问题是什么不会起作用。

1 个答案:

答案 0 :(得分:1)

两小时的偏差是由于你的时区(可能是+2 UTC)。 time()根据UTC返回时间,而date()将其转换为本地时区(在您的情况下添加+2)。

因此,如果您将time()减少一天的秒数,则会到达午夜UTC。然后使用date()打印出来显示当地时间 - 凌晨2点左右。

因此:

  1. 如果您想以UTC格式查看时间,则应使用gmdate()代替date()

  2. 如果您希望$today保留自当地时间以来EPOCH过去的时间,您应该减去时区差异:($today -= (int)substr(date('O'),0,3)*60*60)。

  3. 您应该选择的方法取决于数据库中数据的时区。