Jim*_*mix 3 php precision datetime intervals dateinterval
如何在 PHP 中创建瞬间 DateInterval?例如:
0.123456秒
?
DateInterval::__construct的interval_spec
没有F也不f类似于支持分秒的DateInterval::format 。
DateInterval::createFromDateString的相对格式列表也没有提及秒的任何分数。
但DateInterval 类属性列表显示:
f 微秒数,以秒的一小部分形式表示。
我能够通过使用两个 DateTimes 的DateTime::diff瞬间获得 DateInterval
例子:
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.0';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeStart = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.123456';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeEnd = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$timerDiff = $timerDateTimeStart->diff($timerDateTimeEnd);
$intervalStr = $timerDiff->format('%Y-%M-%D %H:%I:%S.%f');
echo 'Interval (yyyy-mm-dd hh:mm:ss.sfract): ' . $intervalStr;
Run Code Online (Sandbox Code Playgroud)
给出:
Interval (yyyy-mm-dd hh:mm:ss.sfract): 00-00-00 00:00:00.123456
Run Code Online (Sandbox Code Playgroud)
因为 DateTime 在其构造函数中支持瞬间time_format并且DateTime::createFromFormat可以理解
u 微秒(最多六位数) 示例:45, 654321
顺便说一句:您不认为u使用 in case 和DateTime或Fin fcase ofDateInterval可能会让您的一天变得不那么无聊吗?
我的解决方法之一可能是创建两个DateTime具有瞬间精度的值,然后diff获得DateInterval具有相同瞬间精度的值,但我希望仅使用 DateInterval 获得相同的结果。
你知道如何仅使用 the 来创造DateIntervalhaving吗?0.123456 secDateInterval
基于已接受答案的解决方案:
$dateInterval = DateInterval::createFromDateString("1 day, 2 hours, 3 minutes, 1 second, 123456 microsecond");
$intervalStr = $dateInterval->format('%D %H:%I:%S.%F');
echo 'Interval (dd hh:mm:ss.sfract): ' . $intervalStr . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)
给出:
Interval (dd hh:mm:ss.sfract): 01 02:03:01.123456
Run Code Online (Sandbox Code Playgroud)
有一种方法可以使用以下方法来做到这一点DateInterval::createFromDateString:
$di = DateInterval::createFromDateString('123456 microseconds');
var_dump($di);
Run Code Online (Sandbox Code Playgroud)
输出:
object(DateInterval)#1 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0.123456)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
Run Code Online (Sandbox Code Playgroud)
从手册中:
时间
带有相关部分的日期。具体来说,解析器支持的相对格式用于
strtotime()和DateTime将用于构造 DateInterval。