如何从php中的任何日期获得任何日期时间(以微秒为单位)

时间:2013-10-07 21:11:36

标签: php microtime

我想知道是否有办法以微秒为单位获取任何日期时间。

我期待microtime(),但它只是返回当前的日期。

任何人都知道这是否可能?

我的日期如下:Y-m-d H:i:s.u.

我在想(Y-1970)*31556926 + m*151200+d*86400+h*3600+m*60+s.u

之类的东西

但我不知道这是不是为什么我是编程的初学者,但我不能想办法分开每个:Y,m ......做数学。

非常感谢任何帮助/建议。

3 个答案:

答案 0 :(得分:4)

您可以使用DateTime

执行此操作
$date = DateTime::createFromFormat('Y-m-d H:i:s.u', '2000-01-01 13:12:12.129817');
echo $date->format('U.u');
//prints: 946728732.129817

答案 1 :(得分:1)

我要做的就是将输入格式拆分为:

Y-m-d H:i:su

您应该可以通过在输入格式化的日期字符串中展开.来实现此目的。然后只计算整个第二部分的UNIX时间戳。最后,只需将第二部分添加回时间戳(通过算术的字符串连接,具体取决于您是否需要字符串或浮点数)。

答案 2 :(得分:0)

不,这是不可能的。时间戳是内部的整数,描述从格林威治标准时间01.01.1970开始的秒数。无论你使用的是32位还是64位系统,1970年的微秒都会导致溢出,因为有太多的系统消失了。


您更新了问题..是的,可以使用microtime()以微博显示当前时间:

$microtime = microtime();
// will return something like:
// 0.40823900 1381181037
// where the first are the micros and the last a regular time stamp
list($micros, $timestamp) = explode(' ', $microtime);

echo date('Y-m-d H:i:s', intval($timestamp)) . '+' 
  . (floatval($micros) * 1000000) . 'msec';