php解析基于日期范围的csv文件

时间:2018-02-14 18:04:48

标签: php

我正在尝试根据日期范围显示文件中的行(例如:根据日期字段获取今天+接下来的7天)。我不熟悉PHP。 我有以下内容来读取文件并从内容创建一个数组:

$txt_file    = file_get_contents('shipping_dates.txt');
$rows        = explode("\n", $txt_file);
array_shift($rows);

foreach($rows as $row => $data)
{
    //get row data
    $row_data = explode(',', $data);

    $info[$row]['Order_Date']           = $row_data[0];
    $info[$row]['Free_Shipping']        = $row_data[1];
    $info[$row]['Rush_Order']           = $row_data[2];

    //display data
    echo 'Row ' . $row . ' Order_Date: ' . $info[$row]['Order_Date'] . '<br />';
    echo 'Row ' . $row . ' Free_Shipping: ' . $info[$row]['Free_Shipping'] . '<br />';
    echo 'Row ' . $row . ' Rush_Order: ' . $info[$row]['Rush_Order'] . '<br />';

}

这很好用 - 现在我需要根据日期范围抓取各行,并且只显示范围内的行,而不是这3个选项中每个选项的全部内容。

1 个答案:

答案 0 :(得分:1)

我愿意:

假设您所需的日期范围仅适用于“整天”,而不考虑小时数。

以unix TimeStamp格式获取日期范围。 2018年1月的示例。您必须手动添加“00:00:00”和“23:59:59”,以便涵盖整天。

在你的foreach循环之前:

$filter_date_from = '2018-01-01';
$filter_date_to = '2018-01-31';

$date_from = $filter_date_from.' 00:00:00'; // add begin of the day
$date_to = $filter_date_to.' 23:59:59'; // add end of the day

$date_from_ts = strtotime($date_from); // convert to unix timestamp
$date_to_ts = strtotime($date_to);

然后在循环内部,你会检查这个,一旦你有$ info [$ row] ['Order_Date']填充:

// convert the order date to unix timestamp
$order_date_ts = strtotime($info[$row]['Order_Date']);

// just compare
if ($order_date_ts >= $date_from_ts && $order_date_ts <= $date_to_ts) {
    // you want the CSV line because it is IN the date range
}

使用此解决方案,您不关心Order_Date是否包括小时,分钟和/或秒,或者不包括任何一个(如果没有提供,则strtotime将假定为00:00:00)。

请注意,日期/日期时间必须采用php函数“strtotime”理解的格式,如Y-m-d。如果你得到奇怪的结果,请参阅strtotime的文档。

未经测试但请告诉我它是否适合您...