我试图获得格式化的日期,包括从毫秒开始的微秒.
唯一的问题是我一直得到000000
date("m-d-Y H:i:s.u", $milliseconds/1000);
Run Code Online (Sandbox Code Playgroud)
恩.07-28-2013 11:26:14.000000
Arc*_*key 126
您可以使用输入格式轻松完成此操作U.u.
$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
04-13-2015 05:56:22.082300
Run Code Online (Sandbox Code Playgroud)
从日期格式的PHP手册页:
http://php.net/manual/en/function.date.php
感谢giggsey指出我的原始答案中的一个缺陷,添加number_format()到该行应该修复确切的第二个案例.太糟糕了,感觉不再那么优雅......
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.number-format.php
关于DaVe的时区说明.
通常,createFromFormat()如果未指定一个本地时区,该方法将使用本地时区.
http://php.net/manual/en/datetime.createfromformat.php
但是,此处描述的技术是初始化DateTime对象,使用microtime()该对象返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来经过的秒数.
http://php.net/manual/en/function.microtime.php
这意味着DateTime对象被隐式初始化为UTC,这对于只想跟踪已用时间的服务器内部任务来说很好.
如果您需要显示特定时区的时间,则需要相应地进行设置.然而,由于上面讨论的原因,这应该在初始化之后作为单独的步骤(不使用第三参数createFromFormat())来完成.
该setTimeZone()方法可用于实现此要求.
http://php.net/manual/en/datetime.settimezone.php
举个例子:
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';
$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818
Run Code Online (Sandbox Code Playgroud)
请注意,如果要输入mysql,则时间格式必须为:
format("Y-m-d H:i:s.u")
Run Code Online (Sandbox Code Playgroud)
Mar*_*vac 115
php.net说:
微秒(在PHP 5.2.2中添加).请注意,
date()它将始终生成,000000因为它采用整数参数,而DateTime::format()如果DateTime使用微秒创建则支持微秒.
所以使用简单:
$micro_date = microtime();
$date_array = explode(" ",$micro_date);
$date = date("Y-m-d H:i:s",$date_array[1]);
echo "Date: $date:" . $date_array[0]."<br>";
Run Code Online (Sandbox Code Playgroud)
推荐和使用dateTime()引用的类:
$t = microtime(true);
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );
print $d->format("Y-m-d H:i:s.u"); // note at point on "u"
Run Code Online (Sandbox Code Playgroud)
注意u是微秒(1秒=1000000μs).
来自php.net的另一个例子:
$d2=new DateTime("2012-07-08 11:14:15.889342");
Run Code Online (Sandbox Code Playgroud)
dateTime()在php.net上的参考
我对问题的回答很简短并且简化了作者.有关作者的更多信息,请参阅:获取日期格式mdY H:i:su从毫秒开始
tho*_*tso 12
这是一个略短的方法.而不是创建工作高精度数字日期/时间,我微秒值转换为字符串,删除0,并添加到日期/时间字符串的结尾.我可以通过调整字符串长度参数轻松修剪小数位数; 这里我4用来获得毫秒,但你可以7用来获得微秒.
$t = explode(" ",microtime());
echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);
Run Code Online (Sandbox Code Playgroud)
对于microtime()值0.98236000 1407400573,返回08-07-14 01:08:13.982.
echo date('m-d-Y H:i:s').substr(fmod(microtime(true), 1), 1);
Run Code Online (Sandbox Code Playgroud)
示例输出:
02-06-2019 16:45:03.53811192512512
Run Code Online (Sandbox Code Playgroud)
如果您需要限制小数位数,那么下面的行(信用mgutt)将是一个很好的选择.(使用下面的代码,6将小数位数限制为6.):
echo date('m-d-Y H:i:').sprintf('%09.6f', date('s')+fmod(microtime(true), 1));
Run Code Online (Sandbox Code Playgroud)
示例输出:
02-11-2019 15:33:03.624493
Run Code Online (Sandbox Code Playgroud)
我用了
echo date("Y-m-d H:i:s.").gettimeofday()["usec"];
output: 2017-09-05 17:04:57.555036
Run Code Online (Sandbox Code Playgroud)
小智 6
从 PHP 7.1 开始,您可以简单地执行以下操作:
$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );
Run Code Online (Sandbox Code Playgroud)
它将显示为:
04-11-2018 10:54:01.321688
Run Code Online (Sandbox Code Playgroud)
该错误最近已修复,现在您可以使用带有小数部分的 UNIX 时间戳。
$milliseconds = 1375010774123;
$d = new DateTime( '@'. $milliseconds/1000 );
print $d->format("m-d-Y H:i:s.u");
Run Code Online (Sandbox Code Playgroud)
输出:
07-28-2013 11:26:14.123000
您需要指定 UNIX 时间戳的格式,然后才能在 DateTime 对象中使用它。正如其他答案中所述,您可以通过使用createFromFormat()和number_format()
$milliseconds = 1375010774123;
$d = DateTime::createFromFormat('U.v', number_format($milliseconds/1000, 3, '.', ''));
print $d->format("m-d-Y H:i:s.u");
Run Code Online (Sandbox Code Playgroud)
输出:
07-28-2013 11:26:14.123000
如果您仍在使用早于 7.3 的 PHP,则可以替换U.v为U.u. 它不会有任何区别,但毫秒格式标识符仅从 PHP 7.3 开始出现。
$milliseconds = 1375010774123;
// V - Use microseconds instead of milliseconds
$d = DateTime::createFromFormat('U.u', number_format($milliseconds/1000, 3, '.', ''));
print $d->format("m-d-Y H:i:s.u");
Run Code Online (Sandbox Code Playgroud)
输出:
07-28-2013 11:26:14.123000