是否可以使用DateTime
从现在到一周前抓取每个日期而不是制作数组,例如
1-4-2014
1-3-2014
1-2-2014
等等
目前这是我的代码
<?php
$datetime = new DateTime();
$datetime->format('Y-m-d');
$arr = array(/* diverse dates */);
foreach ($to_remove as $item)
{
$is_smaller = ($to_remove->format('U') <= $datetime->format('U'));
if ($is_smaller)
{
$arr = array_filter($arr, function($item) use ($to_remove) {
return !preg_match("/$to_remove by /", $item);
});
}
}
基本上我需要它来检查一周前的当前日期和日期,然后从数组中删除字符串。
答案 0 :(得分:2)
是的,您可以DateTime
使用DateInterval
课程,DatePeriod
使用$now = new DateTime( "now");
$yourInterval= new DateInterval( 'P1D'); //here you set interval per one day
$yourPeriodOfSevenDays= new DatePeriod( $now, $yourInterval, 7); // here you will set to what piriod of time get inerval
foreach($yourPeriodOfSevenDays as $day) {
$date = $day->format( 'd-m-Y');
$resultArray[] = $date ;
}
:
array(8) { [0]=> string(10) "04-01-2014" [1]=> string(10) "05-01-2014" [2]=> string(10) "06-01-2014" [3]=> string(10) "07-01-2014" [4]=> string(10) "08-01-2014" [5]=> string(10) "09-01-2014" [6]=> string(10) "10-01-2014" [7]=> string(10) "11-01-2014" }
现在您将拥有数组中的所有日期
{{1}}
答案 1 :(得分:1)
这是我能想到的最简单的方法: -
$lastWeek = new \DateTime('-7 days');
$interval = new \DateInterval('P1D');
$period = new \DatePeriod($lastWeek, $interval, new \DateTime());
var_dump(iterator_to_array($period));
如果你喜欢一个衬垫,那就更简单了: -
$period = new \DatePeriod(new \DateTime('-7 days'), new \DateInterval('P1D'), new \DateTime());
var_dump(iterator_to_array($period));
然后,您可以在foreach循环中使用DatePeriod对象,因此您可能不需要数组: -
$period = new \DatePeriod(new \DateTime('-7 days'), new \DateInterval('P1D'), new \DateTime());
foreach($period as $day){
echo $day->format('Y-m-d');
}
答案 2 :(得分:0)
您可以使用DateTime::add
。
$dateTime = new DateTime("now");
$dateInterval = new DateInterval('P1D');
$days = 7;
$resultArray = array();
for($i=0 ; $i<$days ; $i++){
$dateTime->add($dateInterval);
$resultArray[] = $dateTime->format('d-m-Y');
}
结果:
array(7) {
[0]=> string(10) "05-01-2014"
[1]=> string(10) "06-01-2014"
[2]=> string(10) "07-01-2014"
[3]=> string(10) "08-01-2014"
[4]=> string(10) "09-01-2014"
[5]=> string(10) "10-01-2014"
[6]=> string(10) "11-01-2014"
}
编辑:
我的错,我在“一周前”过度描述了这个描述。 您也可以使用DateTime::sub