我正在尝试根据日期范围显示文件中的行(例如:根据日期字段获取今天+接下来的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个选项中每个选项的全部内容。
答案 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的文档。
未经测试但请告诉我它是否适合您...