使用 PHP,如何检索与创建的月份和年份匹配的项目

Posted

技术标签:

【中文标题】使用 PHP,如何检索与创建的月份和年份匹配的项目【英文标题】:With PHP, how to retrieve items that match created month and year 【发布时间】:2014-04-02 07:53:27 【问题描述】:

我正在使用此代码从我的 MongoDB 中检索新闻:

foreach (collection("news")->find(["created"=>$time]) as $news)

现在我只想找到那些带有“已创建”unix 时间戳的新闻文章,该时间戳与特定年份的特定月份相匹配,例如 2014 年 4 月。

任何帮助将不胜感激。

干杯。

编辑:谢谢大家的努力,是的,这是 unix 时间戳。

【问题讨论】:

是 unix 时间戳还是 BSON 日期? 【参考方案1】:

您是如何创建 Unix 时间戳的?它在文档中是如何表示的? 您是使用MongoDate 类型,还是使用integer

如果您使用的是MongoDate 类型,那么您需要构造MongoDate 对象并将它们用于您的$gte$lt 条件

$article = array(
    "title"     => "My first article",
    "content"   => "This is good news",
    "published" => new MongoDate(),
    "author"    => "Random guy on the internet",
);

$collection->insert($article);

$start = new MongoDate(strtotime("yesterday"));
$end   = new MongoDate(strtotime("tomorrow"));

$cursor = $collection->find(array("ts" => array('$gt' => $start, '$lte' => $end)));

foreach($cursor as $article) 
    var_dump($article);

更多信息请见http://www.php.net/manual/en/class.mongodate.php

【讨论】:

【参考方案2】:

您将构建自己的查询:

SELECT * FROM news WHERE created >= $start_date AND created <= $end_date

在哪里:

假设created是unix时间戳,否则你应该跳过strtotime函数

// first day of april 2014
$start_date = strtotime(date('2014-04-01'));

// last day of april 2014
$end_date = strtotime(date('2014-04-t'));

【讨论】:

【参考方案3】:

您可以使用DateTime::createFromFormat 创建您的时间戳。

$begin = DateTime::createFromFormat('!Y-m', '2014-04');
$end = clone $begin;
$end->modify('next month');

echo $begin->format('Y-m-d H:i:s'). PHP_EOL; // 2014-04-01 00:00:00
echo $end->format('Y-m-d H:i:s');            // 2014-05-01 00:00:00

并构建更复杂的condition。

collection("news")
    ->find(["created" => array(
        '$gte' => $begin->getTimestamp(), 
        '$lt' => $end->getTimestamp())]);

【讨论】:

谢谢你。这有点工作,这意味着 find() 只获取 $gte 并显示在特定日期之后创建的项目。 $lt 和/或 array() 被完全忽略。 $begin 和 $end 都被正确定义了。

以上是关于使用 PHP,如何检索与创建的月份和年份匹配的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails中获得重复的月份和年份匹配记录?

特定月份和年份的 NSFetchRequest [重复]

如何根据单独列中的月份和年份参数对 DB2 结果进行排序

d3.timeParse() 日期、月份和年份问题

我将如何在 php 中按给定月份和年份计算未来几个月

如何使用swift找到给定月份和年份的天数