Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中抓取两个日期之间的信息_Php - Fatal编程技术网

在php中抓取两个日期之间的信息

在php中抓取两个日期之间的信息,php,Php,我有一个数组,看起来像这样 $data = [ [ 'date' => '2020-10-01', 'product' => 'Product 1', 'description' => 'Product 1', ], [ 'date' => '2020-11-

我有一个数组,看起来像这样

$data =
        [
            [
                'date' => '2020-10-01',
                'product' => 'Product 1',
                'description' => 'Product 1',
            ],
            [
                'date' => '2020-11-01',
                'product' => 'Product 2',
                'description' => 'Product 2',
            ],
            [
                'date' => '2020-12-01',
                'product' => 'Product 3',
                'description' => 'Product 3',
            ],
            [
                'date' => '2021-01-01',
                'product' => 'Product 4',
                'description' => 'Product 4',
            ]
        ];
我想做的是抓取两次约会之间的所有信息。 例如,我想要2021-01-01和2020-11-01之间的所有内容,然后它将显示产品2、产品3和产品4


我不知道该怎么做,如果你想在PHP中这样做,你可以创建一个类似于SQL的WHERE。。。而且。。。使用

<?php
$data =
        [
            [
                'date' => '2020-10-01',
                'product' => 'Product 1',
                'description' => 'Product 1',
            ],
            [
                'date' => '2020-11-01',
                'product' => 'Product 2',
                'description' => 'Product 2',
            ],
            [
                'date' => '2020-12-01',
                'product' => 'Product 3',
                'description' => 'Product 3',
            ],
            [
                'date' => '2021-01-01',
                'product' => 'Product 4',
                'description' => 'Product 4',
            ]
        ];
        
$from = new DateTime('2020-11-11');
$to = new DateTime('2030-10-13');
        
foreach ($data as $d){
    $productDate = new DateTime($d['date']);
    if (($productDate >= $from) && ($productDate <= $to)){
        echo "is between";
        var_dump($d);
    }
        
}
如果您可以访问SQL查询,那么您可能希望DBMS像注释中提到的@RiggsFolly那样处理这个问题

$lowerBound = strtotime('2020-11-01');
$upperBound = strtotime('2021-01-01');

$result = array_filter($data, function ($item) use ($lowerBound, $upperBound) {
    $itemDate = strtotime($item['date']); 

    return $lowerBound <= $itemDate && $itemDate <= $upperBound;
});

echo '<pre>';
print_r($result);
echo '</pre>';
$lowerBound=strotime('2020-11-01');
$upperBound=strotime('2021-01-01');
$result=array\u filter($data,function($item)use($lowerBound,$upperBound){
$itemDate=strottime($item['date']);

根据注释返回$lowerBound,如果数据最初来源于数据库查询,最好限制其中的内容,例如:

Generally...
    Start        ===>   End
    A            ===>   Z
    1            ===>   10
    0000-00-00   ===>   9999-99-99

Which means...
    2020-12-30 < 2020-12-31 < 2021-01-01
在这种情况下,当我们比较两个格式正确的日期(格式相同)时,我们无需更改数据类型/格式;使用
DateTime
strottime
转换字符串与比较字符串格式的值相比,只会增加所需的时间
~10x

无论如何,比较日期:

使用
阵列过滤器

$minDate = '2020-11-01';
$maxDate = '2021-01-01';
$result  = [];

foreach($data as $item){
    if($minDate <= $item["date"] && $item["date"] <= $maxDate){
        $result[] = $item;
    }
}

你写一个循环,在里面测试日期等等,你说的“两个日期之间”是什么意思?您想查看实际日期吗?因此,如果一个条目包含两个日期之间的日期,那么应该使用它,还是只查看数组,只使用两个选定数组条目之间的条目?数组是否已排序?如果此数据来自数据库,最简单的解决方案应该是修改查询以匹配您的请求UIREMENT请不要只是要求我们解决问题或为您编写解决方案。欢迎初学者,但我们希望您在提出问题之前能够努力解决自己的问题。我们非常愿意用您编写的代码帮助您解决问题。希望您不介意,只是认为我可以节省一些CPU周期是的,我没有意识到由于某种原因,您更改了问题中使用的开始和结束日期:)
$minDate = '2020-11-01';
$maxDate = '2021-01-01';
$result  = array_filter($data, function ($item) use ($minDate, $maxDate) {
    return $minDate <= $item["date"] && $item["date"] <= $maxDate;
});
$minDate = '2020-11-01';
$maxDate = '2021-01-01';
$result  = [];

foreach($data as $item){
    if($minDate <= $item["date"] && $item["date"] <= $maxDate){
        $result[] = $item;
    }
}