【问题标题】:php timezone MongoDB $gt/$lt troublephp timezone MongoDB $gt/$lt 麻烦
【发布时间】:2014-01-23 17:51:59
【问题描述】:

我对时区和 mongodate 感到困惑,我知道 mongo 使用 UTC。我需要 utc+1 的 php 结果:

php 中的 date_default_timezone_get() 表示“欧洲/柏林”,这似乎是正确的。

mongoDate 条目是 "ISODate("2014-01-06T10:03:47.182Z")",正确的 utc +1 是 11:03 而不是 10:03。所以我对按天分组的 $gt/$lt 有问题。

[编辑]
我的确切问题是,一个用户在 0:08 注册,但在 mongoDB ISODate 中是 23:08(又是一天..),所以我有问题要准确分组 24 小时。

$dateStart = new MongoDate(strtotime("2014-01-01 00:00:00"));
$dateEnd = new MongoDate(strtotime("2014-12-31 23:59:59"));
数组(
数组('$match' => 数组('regdate' => 数组('$gt' => $dateStart, '$lt' => $dateEnd))),
数组('$project' => 数组('day' => 数组('$dayOfMonth' => '$regdate'))),
array('$group' => array('_id' => array('day' => '$day'), 'count' => array('$sum' => 1))),
数组('$sort' => 数组('_id.day' => -1)),
);

这显示了 1 个结果,但正确的是 2,用户注册时间是 0:08 而不是 23:08。

我希望你明白我的意思。 :)

谢谢和最好的问候,

【问题讨论】:

    标签: php mongodb datetime


    【解决方案1】:

    MongoDB 尚不了解时区,因此它只实现一个 UTC。

    虽然这不是一件坏事,真正的时区应该在您的应用程序而不是您的数据库中实现。

    为此,您可以使用:http://uk3.php.net/gmdate,默认使用 UTC。

    但是,您也可以使用 date('c', time()); 将时区应用于日期,我听说这很有效,但我自己没有测试过。我更喜欢让我的应用程序以我的数据库标准化的方式处理时区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多