0

我正在为所有包含以下格式的日期的文章抓取页面:

2012-08-20T11:04:00+0200

如果下一篇文章从今天起 12 个月发布,我想要做的是停止检索文章。我能想到的方法如下:

while ($retrieveArticles == true) {

    $stopDate = date('Y-m-d'); // <--- this gives me todays date while I need the date 12 months ago.

    $date = $article->find('header div p span', 1);
    $date = substr($date->title, 0, 10); // <--- becomes 2012-08-20

    if ($date >= $stopDate) {
        $retrieveArticles = false;
    }

    ... not relevant code

}

我需要帮助:

  1. 如何从今天的日期减去 12 个月?

  2. 我这样做是正确的,还是有更好、更优雅的方法来实现我想要的?

提前致谢!

4

5 回答 5

1

是肯定的 :

$in_12_months = strtotime('+12 months');

while ($retrieveArticles == true) {
  $article_date = strtotime($article->find('header div p span', 1));

  if ($article_date >= $in_12_months) {
    $retrieveArticles = false;
  }
}
于 2013-01-17T17:17:04.543 回答
1

我是这样做的:

<?php
$s = strtotime('2012-02-09T11:04:00+0200');
$timeDifference = time() - $s;
echo round($timeDifference / 60 / 60 / 24 / 30);
?>

输出: 11

于 2013-01-17T17:22:22.377 回答
1

如果将日期的 Ymd 格式与一起比较,那将是错误的:
您需要使用 strtotime() 函数将其转换为时间格式。12 个月,即(365*24*3600 秒)。所以你可以像这样改变你的功能:

while ($retrieveArticles == true) {

    $stopDate = date('Y-m-d'); // <--- this gives me todays date while I need the date 12 months ago.

    $date = $article->find('header div p span', 1);
    $date = substr($date->title, 0, 10); // <--- becomes 2012-08-20

    $stopDate = strtotime($stopDate);
    $date = (int)strtotime($date)  + (365*24*3600);
    if ($stopDate >= $date) {
        $retrieveArticles = false;
    }
}
于 2013-01-17T17:30:03.363 回答
0

转换2012-08-20T11:04:00+0200为时间戳:如何在 PHP 中将日期转换为时间戳?
然后只是这样做$seconds = time()-$theresult将是从那时起的秒数。12 个月应该大约等于 3100 万秒

于 2013-01-17T17:16:30.287 回答
0

你可以这样做:

<?php
// Current date
$posted = strtotime("2012-08-20T11:04:00+0200");

// 12 months ago
$timestamp = strtotime("-12 months", $posted);

// days
$days = ($posted - $timestamp) / 60 / 60 / 24;

$get_items = true;
if($days >= 365){
    $get_items = false;
}
于 2013-01-17T17:24:58.007 回答