php:将毫秒转换为日期
Posted
技术标签:
【中文标题】php:将毫秒转换为日期【英文标题】:php: convert milliseconds to date 【发布时间】:2010-10-08 03:53:19 【问题描述】:我有一个等于日期的字符串,表示为自 Unix 纪元以来的毫秒数。
我正在尝试将其输出到 d-m-Y。
我得到的字符串是“1227643821310”,我被告知结果应该等于2-12-2008,但我一直得到25-11的结果-2008
我的代码如下:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);
关于为什么会这样的任何想法?
【问题讨论】:
【参考方案1】:$mil = 1227643821310;
$seconds = ceil($mil / 1000);
echo date("d-m-Y", $seconds);
【讨论】:
【参考方案2】:对于转换本身,我使用这一行:$date = date('d-m-Y H:i:s', $millis / 1000);
虽然答案很简单,但我也想贴一个示例 sn-p 以供使用,就这样吧。
从中提取day、month和year。
// 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
【讨论】:
【参考方案3】:我刚刚添加了 H:i:s,如下例所示:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
【讨论】:
【参考方案4】:Jeff,在处理时间戳时要了解的重要一点:它们表示从 0:00:00 01.01.1970 格林威治标准时间开始的时间,而不是在您的时区(除非您自己在当然是格林威治标准时间)。
1227643821 确实代表 GMT 时间 25.11.2008 20:10:21。
在世界大部分地区,这是 2008 年 11 月 25 日,但在莫斯科东部的时区(由于夏令时,莫斯科时区本身在夏季)已经是 11 月 26 日。由于最“极端”的东部时区是 GMT+14,因此世界上没有任何地方可以用 1227643821 的时间戳来表示晚于 26 日的日期。
原始值的作者在处理时区时可能会出现某种错误。或者只是完全错误。例如,在计算值时,在某个步骤添加秒而不是毫秒。
【讨论】:
Ilya,确实 Unix 时间戳(POSTIX 时间)是自 GMT 纪元以来经过的时间量,但是,当您使用 php 的 date() 函数时,它会将该日期转换为您的服务器的本地时间等值。为了获得 GMT 时间的日期,您必须使用 PHP 的 gmdate() 函数。【参考方案5】:您已经做对了,1227643821 根本不是 02-12-2008,它确实是 25-11-2008。
【讨论】:
你确实是对的——事实证明我得到的来源是错误的。echo date("d-m-Y", ($mil / 1000) );
- 有什么理由不只是保存一些代码并一次性完成所有工作吗?一直在寻找节省内存和减少不必要的内存/变量/行的方法。
这是我经常使用的另一个在线 Unix 纪元时间戳转换器:epochconverter.com【参考方案6】:
我唯一能想到的就是在将小数部分转换为日期之前尝试四舍五入。如果这不改变结果,那么结果是正确的。
【讨论】:
以上是关于php:将毫秒转换为日期的主要内容,如果未能解决你的问题,请参考以下文章