gpt4 book ai didi

来自带有毫秒/微秒的负 UNIX 时间戳的 PHP DateTime

转载 作者:搜寻专家 更新时间:2023-10-31 22:07:43 25 4
gpt4 key购买 nike

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

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

\DateTime::createFromFormat("U u", "100 123456") 有效,但是 \DateTime::createFromFormat("U u", "-100 123456") 没有。

并且\DateInterval 目前没有微秒。

到目前为止,我发现创建此类 DateTime 的唯一方法是解析像 new\DateTime("1969-12-31T23:59:59.877GMT") 这样的字符串,但我没有像 number->string->DateTime 链。有没有更清晰的方法?

最佳答案

在 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);

更短但更隐蔽(结合整数负秒和正小数部分):

$date = new \DateTime(sprintf("@%d 00:00:00.%06d", $div, $mod));

转换回来

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

关于来自带有毫秒/微秒的负 UNIX 时间戳的 PHP DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com