是否可以在数组中使用datetime?

时间:2014-01-04 15:05:19

标签: php

是否可以使用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);
         });             
    }
}

基本上我需要它来检查一周前的当前日期和日期,然后从数组中删除字符串。

3 个答案:

答案 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));

See it working

如果你喜欢一个衬垫,那就更简单了: -

$period = new \DatePeriod(new \DateTime('-7 days'), new \DateInterval('P1D'), new \DateTime());
var_dump(iterator_to_array($period));

See it working

然后,您可以在foreach循环中使用DatePeriod对象,因此您可能不需要数组: -

$period = new \DatePeriod(new \DateTime('-7 days'), new \DateInterval('P1D'), new \DateTime());
foreach($period as $day){
    echo $day->format('Y-m-d');
}

See it working

参考http://php.net/datetime

答案 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