The MongoDate class

(PECL mongo >=0.8.1)

Введение

Represent date objects for the database. This class should be used to save dates to the database and to query for dates. For example:

Пример #1 Storing dates with MongoDate

<?php

// save a date to the database
$collection->save(array("ts" => new MongoDate()));

$start = new MongoDate(strtotime("2010-01-15 00:00:00"));
$end = new MongoDate(strtotime("2010-01-30 00:00:00"));

// find dates between 1/15/2010 and 1/30/2010
$collection->find(array("ts" => array('$gt' => $start'$lte' => $end)));

?>

MongoDB stores dates as milliseconds past the epoch. This means that dates do not contain timezone information. Timezones must be stored in a separate field if needed. Second, this means that any precision beyond milliseconds will be lost when the document is sent to/from the database.

Обзор классов

MongoDate {
/* Fields */
public int $sec ;
public int $usec ;
/* Методы */
public __construct ([ int $sec = time() [, int $usec = 0 ]] )
public string __toString ( void )
}

Содержание

Коментарии

For showing a human readable MongoDate, you can use something like this:

<?php
date
('Y-M-d h:i:s'$yourDate->sec);
?>
2010-03-15 13:43:50
http://php5.kiev.ua/manual/ru/class.mongodate.html
I wanted a way to check the age of a record.  This code will calculate the time between the creation date of the record, and return the seconds.  I use it for caching pages similar to the max-age header in a browser.  If the record is older, than my limit it deletes itself.

<?php
function microtime_diff$start$end=NULL ) { 
        if( !
$end ) { 
           
$endmicrotime(); 
        } 
        list(
$start_usec$start_sec) = explode(" "$start); 
        list(
$end_usec$end_sec) = explode(" "$end); 
       
$diff_secintval($end_sec) - intval($start_sec); 
       
$diff_usecfloatval($end_usec) - floatval($start_usec); 
        return 
floatval$diff_sec ) + $diff_usec


microtime_diff($cache['stamp']->sec);
?>
2012-02-17 17:32:28
http://php5.kiev.ua/manual/ru/class.mongodate.html
Автор:
This extension is deprecated, but some people still have to use it.

Please, note that properties (sec, usec) are read-only.

You have to do something like this:

<?php

$d 
= new MongoDate();

echo 
"\n" $d->toDateTime()->format(DateTime::ISO8601);

// move to future for 125 seconds
$d = new MongoDate($d->sec 125$d->usec);

echo 
"\n" $d->toDateTime()->format(DateTime::ISO8601);

?>
2016-11-30 01:15:20
http://php5.kiev.ua/manual/ru/class.mongodate.html
MichaelBrenden --

How do the two Mongo drivers determine if they can translate something into the ISODate format?

Does mongo.so require a class type of MongoDate, or does it determine by data returned by __toString() (i.e., "0.12345678 1234567890")?

Does mongodb.so require a class type of \MongoDB\BSON\UTCDateTime, or does it determine by data returned by __toString() (i.e., "1234567890123")?

jmikola

>> the ISODate format?

For the record, ISODate is just a helper function in the mongo shell. The actual BSON type is 0x09 in the BSON spec and is best referred to as "UTC date time".
[url]https://docs.mongodb.com/manual/core/shell-types/#return-date[/url]
[url]http://bsonspec.org/spec.html[/url]

 >> Does mongodb.so require a class type of \MongoDB\BSON\UTCDateTime, or does it determine by data returned by __toString() (i.e., "1234567890123")?

The driver requires a MongoDB\BSON\UTCDateTime object in order to encode a BSON date type. The relevant instanceof check during BSON encoding is here if you care to see it. The __toString() function exists purely as a convenience for userland applications. The driver does not use it outside of tests.
[url]https://github.com/mongodb/mongo-php-driver/blob/1.3.4/src/bson-encode.c#L215[/url]

The legacy mongo.so driver is similar in that it requires a MongoDate object in order to encode a BSON date type (relevant code is here).
[url]https://github.com/mongodb/mongo-php-driver-legacy/blob/1.6.16/bson.c#L273[/url]
2017-12-12 09:08:28
http://php5.kiev.ua/manual/ru/class.mongodate.html

    Поддержать сайт на родительском проекте КГБ