对这个异常模糊的标题表示歉意,我不确定在这里使用的确切术语。
我写了一些PHP来存储当前年份的变量,然后编写另一个变量来存储当前年份减去4(四年前)。作为注释,我确实希望它是全年,因此附加1月1日。
// Get current date
$date = date_create('now');
// Store two digit version of current year
$yearnow = date_format($date, 'y') . "-01-01";
// Reduce the year count by two
$yearminusfour = $yearnow - 4 . "-01-01";
那里没有问题,尽管也许有一种更有效的方法可以做到这一点。但是,然后我使用它来动态抓取WordPress中过去四年的帖子。
这行负责返回正确的帖子的代码在静态时工作正常:
$where .= " AND post_date >= '2010-01-01' AND post_date < '2014-01-01'";
我正在努力的是将两者结合起来,使其充满活力。我试过:
$where .= " AND post_date >= $yearnow AND post_date < $yearminusfour";
$where .= " AND post_date >= '.$yearnow.' AND post_date < '.$yearminusfour.'";
$where .= " AND post_date >= '".$twentyten."' AND post_date < '".$yearminusfour."'";
我被困住了,我确定我的速度很慢。
$where .= " AND post_date >= '$yearnow' AND post_date < '$yearminusfour'";
这是正确的版本。你不需要那些时期在那里。
但是,正如你自己所知道的。这是一个不必要的复杂日期计算,导致不正确的值。例如,您可以使用
echo date("Y-m-d",strtotime("1st January this year")); // 2015-01-01
如何防止 PHP 中的 SQL 注入?
$where .= " AND post_date >= '".$twentyten."' AND post_date < '".$yearminusfour."'";
这将起作用,但您必须:)颠倒比较
$where .= " AND post_date <= '".$twentyten."' AND post_date >= '".$yearminusfour."'";
此外,还应使用预准备语句。建议在使用用户输入时使用。
我认为您正在搜索的范围是不可行的。根据您发布的代码,它会搜索>=当前年份且小于4年前的帖子。所以你需要改变比较。
$where .= " AND post_date <= '".$twentyten."' AND post_date > '".$yearminusfour."'";
$yearnow类似于2015-01-01
。那$yearnow-4
会是什么?
无论如何,您可以使用 DateTime 类(您已经使用了别名 date_create)来执行必要的操作:
<?php
$date = new DateTime('first day of January');
$clause = sprintf('WHERE x BETWEEN %s AND %s',
$date->format('Y-m-d'),
$date->modify('- 4 year')->format('Y-m-d')
);
echo $clause;
印刷品(今年)
WHERE x BETWEEN 2015-01-01 AND 2011-01-01
怎么样?
$yearStart = date('Y-m-d', strtotime('Jan 01'));
$yearEnd = date('Y-m-d',strtotime("$yearStart -4 year"));
$where .= "AND (date_field BETWEEN '".$yearStart."' AND '".$yearEnd."')";
1)要获取日期,请尝试:
$currentdate = date('Y-m-d',time());
$yearminus4 = date('Y-m-d',strtotime("-4 years", time()));
2)我认为您在sql语句中向后选择了条件
$where = " AND post_date >= '" . $yearminus4 . "'
AND post_date <= '" . $currentdate . "'";
我建议使用 mysql 的 BETWEEN 条件(我假设您使用 mysql)和日期减法。
这将看起来像这样:
$where .= " AND post_date BETWEEN '$yearnow' AND '$yearnow' - INTERVAL 4 YEAR";