PHP DateInterval 创建分秒(微秒或毫秒)间隔
PHP DateInterval create split second (microsecond or milisecond) interval
如何在 PHP 中创建分秒 DateInterval?
例如:
0.123456 sec
?
interval_spec 共 DateInterval::__construct
没有 F
也没有 f
类似于支持分秒的 DateInterval::format。
Relative format listing of DateInterval::createFromDateString也不提秒数
但是 DateInterval class properties 列表显示:
f
Number of microseconds, as a fraction of a second.
通过使用两个 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;
给出:
Interval (yyyy-mm-dd hh:mm:ss.sfract): 00-00-00 00:00:00.123456
因为 DateTime 支持分秒 time_format in its constructor and DateTime::createFromFormat 理解
u Microseconds (up to six digits) Example: 45, 654321
顺便说一句:你不认为 u
在使用 DateTime
和 F
或 f
的情况下使用 DateInterval
有有可能让你的一天不那么无聊?
我的解决方法之一是创建两个具有秒精度的 DateTime
,然后创建 diff
以获得具有相同秒精度的 DateInterval
,但我想仅使用 DateInterval 即可获得相同的结果。
您知道如何仅使用 DateInterval
来创建具有 0.123456 sec
的 DateInterval
吗?
基于已接受答案的解决方案:
$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;
给出:
Interval (dd hh:mm:ss.sfract): 01 02:03:01.123456
有一种方法可以使用 DateInterval::createFromDateString
来做到这一点:
$di = DateInterval::createFromDateString('123456 microseconds');
var_dump($di);
输出:
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)
}
来自手册:
time
A date with relative parts. Specifically, the relative formats supported by the parser used for strtotime()
and DateTime
will be used to construct the DateInterval.
如何在 PHP 中创建分秒 DateInterval? 例如:
0.123456 sec
?
interval_spec 共 DateInterval::__construct
没有 F
也没有 f
类似于支持分秒的 DateInterval::format。
Relative format listing of DateInterval::createFromDateString也不提秒数
但是 DateInterval class properties 列表显示:
f Number of microseconds, as a fraction of a second.
通过使用两个 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;
给出:
Interval (yyyy-mm-dd hh:mm:ss.sfract): 00-00-00 00:00:00.123456
因为 DateTime 支持分秒 time_format in its constructor and DateTime::createFromFormat 理解
u Microseconds (up to six digits) Example: 45, 654321
顺便说一句:你不认为 u
在使用 DateTime
和 F
或 f
的情况下使用 DateInterval
有有可能让你的一天不那么无聊?
我的解决方法之一是创建两个具有秒精度的 DateTime
,然后创建 diff
以获得具有相同秒精度的 DateInterval
,但我想仅使用 DateInterval 即可获得相同的结果。
您知道如何仅使用 DateInterval
来创建具有 0.123456 sec
的 DateInterval
吗?
基于已接受答案的解决方案:
$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;
给出:
Interval (dd hh:mm:ss.sfract): 01 02:03:01.123456
有一种方法可以使用 DateInterval::createFromDateString
来做到这一点:
$di = DateInterval::createFromDateString('123456 microseconds');
var_dump($di);
输出:
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)
}
来自手册:
time
A date with relative parts. Specifically, the relative formats supported by the parser used for
strtotime()
andDateTime
will be used to construct the DateInterval.