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