MongoDB\BSON\UTCDateTime 类

(mongodb >=1.0.0)

简介

表示 » BSON 日期。该值为一个 64 位整数,表示自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。负值表示 1970 年之前的日期。

类概要

final class MongoDB\BSON\UTCDateTime implements MongoDB\BSON\UTCDateTimeInterface, MongoDB\BSON\Type, Serializable, JsonSerializable, Stringable {
/* 方法 */
final public __construct(int|float|string|DateTimeInterface|null $milliseconds = null)
final public jsonSerialize(): mixed
final public serialize(): string
final public toDateTime(): DateTime
final public __toString(): string
final public unserialize(string $data): void
}

变更日志

版本 描述
PECL mongodb 1.12.0 实现 Stringable 用于 PHP 8.0+
PECL mongodb 1.3.0 实现 MongoDB\BSON\UTCDateTimeInterface.
PECL mongodb 1.2.0 实现 SerializableJsonSerializable.

目录

添加笔记

用户贡献笔记 3 个笔记

23
Stephen
6 年前
在使用 MongoDB\BSON\UTCDateTime 进行查询时,请确保对于 strtotime 实例,您将构造函数放在毫秒中

$start = new MongoDB\BSON\UTCDateTime(strtotime("midnight") * 1000);
$filter = ['date' => ['$gte' => $start]];
$options = ['sort' => ['date' => -1]];
$query = new MongoDB\Driver\Query($filter,$options);
8
mark at DONTSPAM dot moderndeveloperllc dot com
7 年前
如果您需要微秒精度,请谨慎使用 UTCDateTime,因为此类仅存储到_毫秒_的时间。如果您需要完整的精度,则需要将日期存储为 MongoDB 中的字符串。将 DateTime 转换为浮点数也会降低精度。

一种查看差异的简单方法是

代码
var_dump(
(new DateTime)->format('U.u'),
(float) (new DateTime)->format('U.u'),
(new MongoDB\BSON\UTCDateTime())->toDateTime()->format('U.u')
);

输出
string(17) "1477534060.918415"
double(1477534060.9185)
string(17) "1477534060.918000"

注意:从 PHP 7.1.0 RC4 开始,修复了有关 DateTimeInterface 类微秒格式的大量错误。上面的代码来自 PHP 7.1.0 RC5 和 mongodb 1.2.0alpha3。1.2.0 版本的扩展添加了在不传递整数毫秒的情况下实例化此类功能。
1
mike at brenden dot com
6 年前
来源 [url]https://github.com/mongodb/mongo-php-driver/issues/187[/url]

MichaelBrenden --

两个 Mongo 驱动如何确定它们是否可以将某些内容转换为 ISODate 格式?

mongo.so 是否需要 MongoDate 类的类型,还是通过 __toString() 返回的数据(例如,“0.12345678 1234567890”)来确定?

mongodb.so 是否需要 \MongoDB\BSON\UTCDateTime 类的类型,还是通过 __toString() 返回的数据(例如,“1234567890123”)来确定?

jmikola --

>> ISODate 格式?

为了记录,ISODate 只是 mongo shell 中的一个帮助函数。BSON 规范中的实际 BSON 类型是 0x09,最好称为“UTC 日期时间”。
[url]https://docs.mongodb.com/manual/core/shell-types/#return-date[/url]
[url]http://bsonspec.org/spec.html[/url]

>> mongodb.so 是否需要 \MongoDB\BSON\UTCDateTime 类的类型,还是通过 __toString() 返回的数据(例如,“1234567890123”)来确定?

驱动程序需要一个 MongoDB\BSON\UTCDateTime 对象才能对 BSON 日期类型进行编码。如果您想查看,BSON 编码期间的相关 instanceof 检查在这里。__toString() 函数仅作为用户应用程序的便捷功能存在。驱动程序在测试之外不会使用它。
[url]https://github.com/mongodb/mongo-php-driver/blob/1.3.4/src/bson-encode.c#L215[/url]

传统的 mongo.so 驱动程序类似,它需要一个 MongoDate 对象才能对 BSON 日期类型进行编码(相关代码在这里)。
[url]https://github.com/mongodb/mongo-php-driver-legacy/blob/1.6.16/bson.c#L273[/url]
To Top