[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: диапазон дат
oleg_46
Есть два инпута с датами от и до. Они сабмитятся ГЕТом.
Есть папка с файлами в формате education_report_$date.csv. Переменная это дата создания. Как сделать выборку по диапазону дат. Вычленить текст из файлов, входящих в этот диапазон в файл форматом education_report_$date_from-$date_to.csv




Спустя 5 минут, 22 секунды (8.11.2011 - 22:44) walerus написал(а):
Сканируй папку, форичем перебирай все имена, отрезай "education_report_" и ".csv", останутся даты, сортируй по убыванию/возрастанию и т.д.

Спустя 3 минуты, 55 секунд (8.11.2011 - 22:48) Winston написал(а):
Делаешь strtotime интервала и все имена также переводишь с помощью strtotime имена файлов, и сканируешь потом интервал...

Спустя 12 минут, 15 секунд (8.11.2011 - 23:00) oleg_46 написал(а):
for ($i=strtotime($date_from); $i<strtotime($date_to); $i++) 

Как то так? А как форичем отрезать лишнее?

echo strtotime("education_report_2011-11-08.csv");
Ничего не возвращает.

Спустя 9 минут, 17 секунд (8.11.2011 - 23:09) walerus написал(а):
Цитата
Есть два инпута с датами от и до. Они сабмитятся ГЕТом.
Приведи пример что в переменных?, т.е. как вводятся даты и в каком виде они на венике лежат.

Спустя 1 минута, 35 секунд (8.11.2011 - 23:11) Winston написал(а):
Читаешь директорию, потом проходишь по названию файлов, переводишь их тоже в unix формат с помощью strtotime и если имя файла больше времени старта и меньше времени окончания, то имена записываешь в массив.

Спустя 4 минуты, 29 секунд (8.11.2011 - 23:15) oleg_46 написал(а):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Документ без названия</title>
</head>

<body>
<form
action="generate_report2.php" method="get" name="form1" target="_self">

<input
name="date_from" value="<?php echo date("Y-m-d", time()-3600*24);?>" type="date" />
<input
name="date_to" type="date" />
<input
name="button1" type="submit" />
</form>

</body>
</html>


Эта форма сабмитится в 1.php. Получаем $_GET["date_from"] и $_GET["date_to"]. В папке files сайта лежат файлы каждой даты в формате education_report_2011-11-08.csv Нужно выбрать файлы попадающие в диапазон и сложить из них текст в один фаил форматом допустим education_report_2011-11-08-2011_11_07.csv

Спустя 42 минуты, 51 секунда (8.11.2011 - 23:58) oleg_46 написал(а):
Как перебрать на предмет filectime все файлы в директории?

Спустя 5 минут, 22 секунды (9.11.2011 - 00:03) walerus написал(а):
function select_the_files_by_date_range( $directory, $from_the_date_of = 0, $to_date = 0 )
{
$result = array();
if ( substr( $directory, -1 ) == "/" )
$directory = substr( $directory, 0, -1 );

if ( $dh = opendir( $directory ) )
{
while ( ( $file = readdir( $dh ) ) !== false )
{
if ( ( $file == '.' ) || ( $file == '..' ) ) continue;

if ( !preg_match('~.*education_report.*~iUs', $file) ) continue; // Условие!!!, брать файлы с названием education_report

if ( !is_dir( $directory."/".$file ) )
{
### Обрабатываем имя файла
// Обраезаем ( 'education_report_', '.csv' ) education_report_2011-11-08.csv

$tmp_name_file = str_replace( array( 'education_report_', '.csv' ), array( '', '', ), $file );

// переводим в UNIX формат
$tmp_name_file = strtotime( $tmp_name_file );
$to_date_unix = strtotime( $to_date );
$from_the_date_of_unix = strtotime( $from_the_date_of );

// Проверяем диапазон
if ( $tmp_name_file >= $from_the_date_of_unix && $tmp_name_file <= $to_date_unix )
{
// Считываем файл
$get_data_file = file_get_contents( $directory."/".$file );

// Добавили в результирующий массив
$result[] = $get_data_file;
}
}
}
}


closedir($dh);
return $result;
}

$date_from = '05-01-2011';
$date_to = '10-11-2011';
$directory = ''; // сюда путь до папки с файлами

$select_the_files_by_date_range = select_the_files_by_date_range( $directory, $date_from, $date_to );

if ( !empty( $select_the_files_by_date_range) )
{
// Если есть результаты, то записываем
file_put_contents( 'education_report_' .$date_from. '-' .$date_to. '.csv', implode( "\n\n", $select_the_files_by_date_range ) );
}
else
{
// Если нет результатов, то ошибка
echo "Ошибка !";
}


Разбирайся, проверил лично, все работает.

Спустя 2 минуты, 29 секунд (9.11.2011 - 00:06) walerus написал(а):
filectime - это не твое, оно "Возвращает время последнего изменения файла", а не считывает дату из названия файла...

Спустя 5 минут, 23 секунды (9.11.2011 - 00:11) walerus написал(а):
Кстати файлы CSV - как бы не считаются текстовыми, а то на складывает в кучу laugh.gif

Спустя 7 минут, 49 секунд (9.11.2011 - 00:19) oleg_46 написал(а):
Спасибо. А как лучше цсв склеивать?

Спустя 5 минут, 37 секунд (9.11.2011 - 00:25) walerus написал(а):
Почитай про fgetcsv, ничего сложного...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.