Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从负UNIX时间戳开始的PHP日期时间(毫秒/微秒)_Php_Datetime_Timestamp - Fatal编程技术网

从负UNIX时间戳开始的PHP日期时间(毫秒/微秒)

从负UNIX时间戳开始的PHP日期时间(毫秒/微秒),php,datetime,timestamp,Php,Datetime,Timestamp,我想从负UNIX时间戳(1970年之前)创建PHP\DateTime对象,时间为微秒,没有太多脏代码 new\DateTime(@-100”)有效,但new\DateTime(@-100.123”)无效 \DateTime::createFromFormat(“U U”,“100 123456”)有效,但\DateTime::createFromFormat(“U U”,“100 123456”)无效 和\DateInterval当前没有微秒 到目前为止,我发现创建此类日期时间的唯一方法是解析字

我想从负UNIX时间戳(1970年之前)创建PHP\DateTime对象,时间为微秒,没有太多脏代码

new\DateTime(@-100”)
有效,但
new\DateTime(@-100.123”)
无效

\DateTime::createFromFormat(“U U”,“100 123456”)
有效,但
\DateTime::createFromFormat(“U U”,“100 123456”)
无效

和\DateInterval当前没有微秒


到目前为止,我发现创建此类日期时间的唯一方法是解析字符串,如
new\DateTime(“1969-12-31T23:59:59.877GMT”)
,但我不喜欢数字->字符串->日期时间链。还有更清晰的方法吗?

在x64上工作的代码,用于微秒之间的转换,但我不太喜欢它

$ts_mks = -100000012345;

$div = floor($ts_mks / 1000000);
$mod = $ts_mks % 1000000;
if($mod < 0) {
    $mod += 1000000;
}

$date_s = new \DateTime();
$date_s->setTimestamp($div);
$date_s->setTimezone(new \DateTimeZone("GMT"));
$ts_str = $date_s->format("Y-m-d\\TH:i:s.") . sprintf("%06dZ", $mod);

// result
$date = \DateTime::createFromFormat("Y-m-d\\TH:i:s.ue", $ts_str);
转换回

$ts_mks = $date->getTimestamp() * 1000000 + (int) $date->format("u");
$ts_mks = $date->getTimestamp() * 1000000 + (int) $date->format("u");