PHP Equivalent of C# ticks


PHP Equivalent of C# ticks

我目前正在转换一个ASP。NET c#应用到PHP。该服务使用DateTime Ticks,我想知道PHP中是否有等效的。

如果不是,我计算时间跨度的最佳方法是什么?

使用microtime(true)

请注意以下内容,直接摘自PHP手册

默认情况下,microtime()返回一个"msec sec"形式的字符串,其中SEC是当前时间,以秒数来衡量Unix纪元(0:00:00 January 1, 1970 GMT), msec是时间的序号自SEC以来经过的微秒数,单位为秒。

如果get_as_float被设置为TRUE,那么microtime()返回一个float,它表示自Unix纪元以来以秒为单位的当前时间精确到微秒。

[Edit:我后来看到DateTime ticks也非常类似于PHP DateTime->diff方法,所以添加了它;

我通常这样做基准测试(kudo也对freedompeace):

$time = microtime(true);
// do your thing
$diff = microtime(true) - $time;

见:http://php.net/microtime

对于其他日期,您可以这样做:

$date1 = new DateTime('05-04-2010');
$date2= new DateTime('yesterday');
// returns a DateInterval object
$diff = $date1->diff($date2);

DateInterval对象的拓扑结构如下:

<>之前$DateInterval->y;公共整数$m;公共整数$d;公共整数$h;公共整数$i;公共整数$s;公共整数$invert;公众混合型$days;之前

DateTime Class http://www.php.net/manual/en/class.datetime.php

Diff method http://www.php.net/manual/en/datetime.diff.php

DateInterval Object http://www.php.net/manual/en/class.dateinterval.php

你可以这样做…在我看来这是一个普遍的问题。大的"幻数"是1970-1-1和1-1-1之间的差异。


$mtime = microtime(false);
list($usec, $sec) = explode(" ", $mtime);
$usec = (string)($usec * 10000000);
$timestamp = gmp_add(gmp_add(gmp_mul($sec, "10000000"), (string)$usec), "621355968000000000");

如果你不想用-gmp重新编译PHP,这似乎可以工作:

$time=time()
number_format(($time * 10000000) + 621355968000000000 , 0, '.', '');

使用microtime获取usec,它可以覆盖结束的0。