如何在两个dateTime obj之间获得毫秒?

Pri*_*ief 6 php datetime

如何在两个DateTime对象之间获得毫秒?

$date = new DateTime();
$date2 = new DateTime("1990-08-07 08:44");
Run Code Online (Sandbox Code Playgroud)

我试着按照下面的评论,但我收到了一个错误.

$stime = new DateTime($startTime->format("d-m-Y H:i:s"));
$etime = new DateTime($endTime->format("d-m-Y H:i:s")); 
$millisec = $etime->getTimestamp() - $stime->getTimestamp();` 
Run Code Online (Sandbox Code Playgroud)

我收到了错误

调用未定义的方法DateTime :: getTimestamp()

Sau*_*aul 17

严格来说,你不能.

这是因为DateTime类的最小时间单位是秒.

如果您需要一个包含毫秒的测量值,那么使用microtime()


编辑:

另一方面,如果您只想获得两个ISO-8601日期时间之间的间隔(毫秒),那么一个可能的解决方案就是

function millisecsBetween($dateOne, $dateTwo, $abs = true) {
    $func = $abs ? 'abs' : 'intval';
    return $func(strtotime($dateOne) - strtotime($dateTwo)) * 1000;
}
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下,上述函数返回绝对差值.如果您想知道第一个日期是否更早,则将第三个参数设置为false.

// Outputs 60000
echo millisecsBetween("2010-10-26 20:30", "2010-10-26 20:31");

// Outputs -60000 indicating that the first argument is an earlier date
echo millisecsBetween("2010-10-26 20:30", "2010-10-26 20:31", false);
Run Code Online (Sandbox Code Playgroud)

在时间数据类型的大小为32位的系统上,例如Windows7或更早版本,millisecsBetween仅适用于之间的日期1970-01-01 00:00:002038-01-19 03:14:07(参见2038年问题).


Hug*_*and 5

抱歉挖出一个老问题,但我找到了一种从 DateTime 对象中获取毫秒时间戳的方法:

function dateTimeToMilliseconds(\DateTime $dateTime)
{
    $secs = $dateTime->getTimestamp(); // Gets the seconds
    $millisecs = $secs*1000; // Converted to milliseconds
    $millisecs += $dateTime->format("u")/1000; // Microseconds converted to seconds
    return $millisecs;
}
Run Code Online (Sandbox Code Playgroud)

但是,它要求您的 DateTime 对象包含微秒(格式为 u):

$date_str = "20:46:00.588";

$date = DateTime::createFromFormat("H:i:s.u", $date_str);
Run Code Online (Sandbox Code Playgroud)

这仅从 PHP 5.2 开始起作用,因此添加了对 DateTime 的微秒支持。

使用此功能,您的代码将变为以下内容:

$date_str = "1990-08-07 20:46:00.588";
$date1 = DateTime::createFromFormat("Y-m-d H:i:s.u", $date_str);

$msNow = (int)microtime(true)*1000;

echo $msNow - dateTimeToMilliseconds($date1);
Run Code Online (Sandbox Code Playgroud)


Bud*_*nWA -3

DateTime 日期仅存储为整秒。如果您仍然需要两个 DateTime 日期之间的毫秒数,那么您可以使用 getTimestamp() 获取每个时间(以秒为单位)(然后获取差值并将其转换为毫秒):

$seconds_diff = $date2.getTimestamp() - $date.getTimestamp()
$milliseconds_diff = $seconds_diff * 1000
Run Code Online (Sandbox Code Playgroud)