对于异常模糊的标题表示道歉,我不确定这里使用的确切术语。
我已经编写了一些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."'";
我被困住了,我确定自己很慢。
答案 0 :(得分:1)
$where .= " AND post_date >= '$yearnow' AND post_date < '$yearminusfour'";
这是正确的版本。你不需要那些时期。
但是,正如你所了解的那样。这是一个不必要的复杂的日期计算,导致错误的值。例如,您可以使用
获取今年的第一个日期echo date("Y-m-d",strtotime("1st January this year")); // 2015-01-01
答案 1 :(得分:1)
$where .= " AND post_date >= '".$twentyten."' AND post_date < '".$yearminusfour."'";
这会有效,但你必须反向比较:)
$where .= " AND post_date <= '".$twentyten."' AND post_date >= '".$yearminusfour."'";
此外,您应该使用预准备语句。当您使用用户输入时,建议使用它。
答案 2 :(得分:0)
我认为你所寻找的范围是不可行的。根据您发布的代码,它会搜索帖子&gt; =当前年份而不是4年前的日期。所以你需要改变比较。
$where .= " AND post_date <= '".$twentyten."' AND post_date > '".$yearminusfour."'";
答案 3 :(得分:0)
$ yearnow就像2015-01-01
。那么$yearnow-4
会是什么?
无论如何,您可以使用DateTime class(您已使用别名date_create)来执行必要的manipulations:
<?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
答案 4 :(得分:0)
我建议使用mysql的BETWEEN条件(我假设你使用mysql)和日期减法。
这将是这样的:
$where .= " AND post_date BETWEEN '$yearnow' AND '$yearnow' - INTERVAL 4 YEAR";
答案 5 :(得分:0)
怎么样?
$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."')";
答案 6 :(得分:0)
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 . "'";