Приветствую. PHP: <?php $data = array( array('time' => '15:30—16:30', 'title' => 'A'), array('time' => '20:30—21:30', 'title' => 'B'), array('time' => '01:30—02:30', 'title' => 'C'), ); ?> Как видно, это какое-то расписание на день. Допустим, что это на 30.11.2010. Задача - записать эту структуру в БД (timestamp начала, timestamp окончания, название). Задача тривиальная, но есть проблема: как видно, "С" начинается в 01:30, что уже является 01.12.2010. Как можно обработать такую ситуацию?
"С" будет выполняться до "А" и "В", всё просто. В противном случае меняй подход - например, выставляй не только время, но и дату. а задания объединяй по смыслу/объекту/чему-либо, но не дате как сейчас.
Они объединены по дню недели. PHP: <?php // $c_month, $c_day, $c_year - текущие значения даты $buf = explode('—', $time_string); $buf = array( 'from' => trim($buf[0]), 'to' => trim($buf[1]), ); foreach($buf as $diff_idx => $diff_str) { $tmp = explode(':', $diff_str); $ts = mktime(intval($tmp[0]), intval($tmp[1]), 0, $c_month, $c_day, $c_year); } ?>
можно сделать так 1) раз блок данных у тебя на определенную дату. то введи поле "дата расписания" 2) добавь вспомогательное поле - "следующий день" со значениям 0 и 1. 3) формируй timestamp с учетом этого значения этого поля
runner, что-то я не понимаю немного. Мне и нужно определить момент перехода на другой день, за что как раз отвечает это вспомогательное поле.
Если я правильно тебя понял, то у тебя есть упорядоченный список элементов массива на один день недели и нужно определить, какой элемент переходит на следующий день. В таком разе в цикле час следующего элемента сравниваешь с часом предыдущего элемента а)если меньше - то день не изменяется б) если больше - то день следующий код примерно такой PHP: $n=sizeof($data)-1; $nextDay=0; for($i=0;$i<$n;$i++) { $start=substr($data[$i]['time'],0,2); $end=substr($data[$i+1]['time'],0,2); if($start>$end) { $nextDay=1; // здесь начало $i-го элемента на день расписания, а конец - на следующий день } else { if($nextDay==1) { // здесь начало $i-го элемента и конец - на следующий день } else { // здесь начало $i-го элемента и конец - на день расписания } } }
runner, может быть наоборот? PHP: <?php $data = array( array('time' => '15:30—16:30', 'title' => 'A'), array('time' => '20:30—21:30', 'title' => 'B'), array('time' => '01:30—02:30', 'title' => 'C'), ); ?> 1. $i = 0; $last = 0; $current_hour = 15; 2. $i = 1; $last = 15; $current_hour = 20; ($current_hour < $last == false; $next = 0 3. $i = 2; $last = 20; $current_hour = 01; ($current_hour < $last == true; $next = 1 нет?