在C#
中考虑这一行代码ordernumber.Value = DateTime.Now.Ticks.ToString();
如何在PHP中获得ordernumber.Value
$ordernumberValue = microtime(); //?
我尝试了这个
echo microtime(true) * 10000000;
但是得到结果string.length是不同的。 长度比C#短。
答案 0 :(得分:4)
来自.NET文档:
DateTime.Ticks Property
此属性的值表示自公元1月1日午夜12:00:00(公历1月1日0:00:00到公历)以来经过的100纳秒间隔的数量,代表DateTime.MinValue。它不包括可归因于闰秒的刻度数。
在PHP中,这简单地实现为time():
时间
返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数测量的当前时间。
microtime()
类似地返回小数点后的秒和微秒的时间,因此它具有更高的精度。由于一些过时的原因,默认值是一个字符串,但是如果你传递true
作为第一个参数,你将得到一个漂亮的浮点数:
rr-@burza:~$ php -r 'echo microtime(true);' 1434193280.3929%
所以你要做的就是将time()
或microtime()
返回的值按常数因子缩放。
根据维基百科,纳秒等于1000皮秒或1/1000微秒,或1/1000000000秒。因此,100纳秒将意味着100/1000000000微秒,即一个.NET tick = 1/10000000秒,即一秒= 10000000 .NET滴答。因此,您需要将time()
或microtime()
返回的值乘以10000000,如下所示:
microtime(true) * 10000000
答案 1 :(得分:1)
我不确定这是不是你在寻找: -
$mt = microtime(true);
$mt = $mt*1000; //microsecs
$ticks = (string)$mt*10; //100 Nanosecs
echo $ticks; //14341946614384
现在主要区别是Ticks是自0001年1月1日午夜12:00:00起100纳秒,而自1970年1月1日起将产生100纳秒
答案 2 :(得分:1)
一个刻度是1/10000000秒。
此代码将当前的microtime转换为" ticks"数:
list($usec, $sec) = explode(" ", microtime());
$ticks = (int)($sec*10000000+$usec*10000000);