5

考虑 C# 中的这行代码

ordernumber.Value = DateTime.Now.Ticks.ToString();

如何ordernumber.Value在 PHP中获得相同的值

$ordernumberValue = microtime(); //?

我尝试这样做

echo microtime(true) * 10000000;

但是得到的结果 string.length 是不同的。长度比 C# 短。

4

3 回答 3

5

来自 .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
于 2015-06-13T10:55:48.690 回答
1

我不确定这是否是您正在寻找的:-

$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 纳秒

于 2015-06-13T11:08:04.623 回答
1

一个刻度是 1/10000000 秒。

此代码将当前微时间转换为“滴答”计数:

list($usec, $sec) = explode(" ", microtime());
$ticks = (int)($sec*10000000+$usec*10000000);
于 2015-06-13T11:15:04.343 回答