我正在尝试检查存储在数据库中的帖子是否分别早于1,2,3,最后4天。
存储所有帖子的表格都有一个日期字段。我有一个查询检索日期,然后我尝试分别检查日期是否超过1,2,3和4天,并根据我想在页面上移动帖子的结果。
我有以下内容:
foreach($this->getArticleData() as $i)
{
if(strtotime($i['date']) > strtotime('-1 day'))
{
$this->priority = '0.9';
}
elseif(strtotime($i['date']) > strtotime('-2 day'))
{
$this->priority = '0.8';
}
elseif(strtotime($i['date']) > strtotime('-3 day'))
{
$this->priority = '0.7';
}
else(strtotime($i['date']) > strtotime('-4 day'))
{
$this->priority = '0.6';
}
}
我不认为代码工作正常。在某些情况下,优先事项是错误的。我是使用srttotime()函数还有另一种更可靠的方法吗?
答案 0 :(得分:0)
Forward slash (/) signifies American M/D/Y formatting, a dash (-) signifies European D-M-Y and a period (.) signifies ISO Y.M.D.
您的数据库使用了 - ' s,您确定对吗?无论如何,更好的代码方式是:
foreach ( $this->getArticleData() as $i ) {
for ( $x = 1; $x < 10; $x++ ) {
if ( strtotime ( $i [ 'date' ] ) > strtotime ( '-'. $x ." day" ) ) {
$this->priority = '0.'. 10 - $i;
}
}
}
答案 1 :(得分:0)
翻转你的>
。您正在检查日期是否比指定时间更长/更新。您还需要翻转if
声明,因为您需要检查最新到最旧的声明。一个4天大的帖子也是1天,将被第一个区块抓住。
答案 2 :(得分:0)
我更喜欢使用优先级地图和DateTime
:
$list = array(
array( 'date' => '2014-12-14' ) ,
array( 'date' => '2014-12-15' ) ,
array( 'date' => '2014-12-14' ) ,
array( 'date' => '2014-12-11' ) ,
array( 'date' => '2014-12-14' ) ,
array( 'date' => '2014-12-13' ) ,
);
# maps days to priority
$priorities = array(
1 => 0.9,
2 => 0.8,
3 => 0.7,
4 => 0.6
);
$currentDate = new DateTime();
foreach( $list as $i ) {
$dateTime = new DateTime( $i['date'] );
$diff = $currentDate->diff( $dateTime );
$days = $diff->format( '%d' );
if( isset( $priorities[ $days ] ) ){
echo 'Date is: ' . $i['date'] . "| Difference is : " . $days . "| Priority is: " . $priorities[ $days ]. "<br/>";
}
}
结果:
Date is: 2014-12-14| Difference is : 1| Priority is: 0.9
Date is: 2014-12-14| Difference is : 1| Priority is: 0.9
Date is: 2014-12-11| Difference is : 4| Priority is: 0.6
Date is: 2014-12-14| Difference is : 1| Priority is: 0.9
Date is: 2014-12-13| Difference is : 2| Priority is: 0.8