输入时间格式:
2016-05-03 01:38:54
输出时间格式:
2016-05-03T01:38:54.003Z
这里是.003
,是毫秒还是微秒?
在PHP中,微秒格式为'u'
,但当我尝试使用以下代码片段时,我得到小数点后的6位数字:
<?php
date_default_timezone_set("Asia/Kolkata");
echo date('Y-m-d\TH:i:s.u\Z', strtotime("2016-05-03 01:38:54"));
我得到的输出为:
2016-05-03T01:38:54.000000Z
但是在小数点后的这个输出中它显示6位数,我想把它改成3位数。我怎么能这样做?
那么我应该如何获得输出格式?
答案 0 :(得分:3)
date_default_timezone_set("Asia/Kolkata");
$t = strtotime('2016-05-03 01:38:54');
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );
$new= $d->Format("Y-m-d\T H:i:s.u\Z");
echo substr($new, 0, -4) ."Z";
//output 2016-05-03T 01:38:54.030Z
答案 1 :(得分:0)
我将使用DateTime类,如下所示:
$tz = new DateTimeZone('Asia/Kolkata');
$date = new DateTime('2016-05-03 01:38:54', $tz );
echo substr($date->format('Y-m-d\TH:i:s.u'), 0, -3) ."Z";
// 2016-05-03T01:38:54.000Z
根据PHP
date manual
u
微秒(在PHP 5.2.2中添加)。请注意date()
将永远 生成000000
因为它需要整数参数,而 如果创建format()
,DateTime ::DateTime
确实支持微秒 微秒。
答案 2 :(得分:0)
试试这个
$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\T H:i:s.u\Z"); // note at point on "u"
答案 3 :(得分:0)
最干净的解决方案可能是 adityabhai在gmail dot com上的修改版对http://php.net/manual/en/function.date.php的评论:
echo date('Y-m-d H:i:s' . substr((string)microtime(), 1, 4));