我有一个字符串,表示自Unix纪元以来的毫秒数,代表着一个日期。
我想将它输出为d-m-Y的格式。
我拿到的字符串是"1227643821310",并且被告知结果应该等于2-12-2008,但我一直得到一个25-11-2008的结果。
我的代码如下:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);
任何想法为什么会这样?我只是像下面的例子一样添加了H:i:s:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
$mil = 1227643821310;
$seconds = ceil($mil / 1000);
echo date("d-m-Y", $seconds);
Jeff,在处理时间戳时需要理解的重要事情是:它们表示从 1970 年 01 月 01 日 0:00:00 GMT 开始经过的时间,而不是你所在时区的时间(当然,除非你自己在 GMT 时区)。
1227643821 确实代表了 GMT 时间 2008 年 11 月 25 日 20:10:21。
这是世界上大多数地区的 2008 年 11 月 25 日,但在莫斯科以东的时区(以及夏令时期间的莫斯科时区本身),已经是 11 月 26 日了。由于最“极端”的东部时区是 GMT+14,因此在世界上没有任何地方,1227643821 时间戳可以代表晚于 26 日的日期。
原始值的作者可能在处理时区时出现了误解。或者只是简单地出现了错误。例如,在计算值时,在某个步骤中添加了秒而不是毫秒。
对于转换本身,我使用以下代码:$date = date('d-m-Y H:i:s', $millis / 1000);
虽然答案很简单,但我还是喜欢发布一个示例片段以供使用,所以这里有它。
从中提取日、月和年。
// explode values first in spaces and then in dashes
$date = explode('-', explode(' ', $date)[0]);
$day = $date[0];
$month = $date[1];
$year = $date[2];
随意使用它们:echo $day . '-' . $month . '-' . $year;
输出:dd-mm-yyyy
echo date("d-m-Y", ($mil / 1000) );
- Wes