从毫秒获取日期格式 m-d-Y H:i:s.u
我正在尝试获取格式化的日期,包括以毫秒为单位指定的UNIX时间戳的微秒。
唯一的问题是我不断得到000000,例如
$milliseconds = 1375010774123;
$d = date("m-d-Y H:i:s.u", $milliseconds/1000);
print $d;
07-28-2013 11:26:14.000000
我正在尝试获取格式化的日期,包括以毫秒为单位指定的UNIX时间戳的微秒。
唯一的问题是我不断得到000000,例如
$milliseconds = 1375010774123;
$d = date("m-d-Y H:i:s.u", $milliseconds/1000);
print $d;
07-28-2013 11:26:14.000000
您可以使用 输入格式 。U.u
$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");
这将生成以下输出:
04-13-2015 05:56:22.082300
从 PHP 手册页中查看日期格式:
http://php.net/manual/en/function.date.php
感谢giggsey指出了我原始答案中的一个缺陷,添加到行中应该可以修复确切的秒的情况。太可惜了,它不再感觉那么优雅了......number_format()
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
http://php.net/manual/en/function.number-format.php
响应 DaVe 的时区说明。
通常,如果未指定本地时区,则该方法将使用本地时区。createFromFormat()
http://php.net/manual/en/datetime.createfromformat.php
但是,此处描述的技术是初始化 DateTime 对象,该对象返回自 Unix 时代(1970 年 1 月 1 日 00:00:00 GMT)以来经过的秒数。microtime()
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>';
生成以下输出:
10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818
请注意,如果要输入到 mysql 中,时间格式需要为:
format("Y-m-d H:i:s.u")
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>";
推荐并使用引用的类: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"
注意是微秒(1 秒 = 1000000 μs)。u
php.net 的另一个例子:
$d2=new DateTime("2012-07-08 11:14:15.889342");
php.net 上的参考资料dateTime()
我已经回答了简短和简化的作者的问题。请参阅作者的更多信息:从毫秒获取日期格式 m-d-Y H:i:s.u