如何在PHP中获取输出日期格式为2016-05-03T01:38:54.003Z?

时间:2016-06-03 05:28:44

标签: php date datetime

输入时间格式:

  

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位数。我怎么能这样做?

那么我应该如何获得输出格式?

4 个答案:

答案 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

http://ideone.com/Wrrve9

根据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));