使用 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,如何检索与创建的月份和年份匹配的项目的主要内容,如果未能解决你的问题,请参考以下文章