Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Помогите написать функцию / 15 сообщений из 15, страница 1 из 1
18.02.2014, 19:13
    #38565082
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
Есть список дат

2014-3-9
2014-3-10
2014-3-11
2014-3-12
2014-3-16
2014-3-17
2014-3-18
2014-3-19

2014-3-11
2014-3-12
2014-3-13
2014-3-14
2014-3-17
2014-3-18

2014-3-22

мне нужно получить массив с такими данными (
2014-3-9 - 2014-3-12;
2014-3-16 - 2014-3-19;

2014-3-11 - 2014-3-14;
2014-3-17 - 2014-3-18;

2014-3-22;)

т.е. нужно сделать так, если идет период дат от и до без пропусков, то ставить между начальной датой и конечной дефис "-", а если дата одна, то её просто выводить через точку с запятой.

Модератор: Название топика откорректировано
...
Рейтинг: 0 / 0
18.02.2014, 19:40
    #38565112
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444,

Язык программирования и способ предоставления входных данных (списка) и выходных можно выбрать по личным предпочтениям? ;-)
...
Рейтинг: 0 / 0
18.02.2014, 19:45
    #38565117
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
Нет(, эти даты я получаю из HTML формы методом POST, мне нужно это реализовать на PHP
...
Рейтинг: 0 / 0
18.02.2014, 20:14
    #38565143
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444эти даты я получаю из HTML формы методом POSTДругими словами, где-то в переменной Вы имеете простой текст, по одной дате на строку. Верно?
...
Рейтинг: 0 / 0
18.02.2014, 20:26
    #38565158
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
Нет нет, я получаю массив с датами.
(
[0] => 2014-3-9
[1] => 2014-3-10
[2] => 2014-3-11
[3] => 2014-3-12
[4] => 2014-3-16
[5] => 2014-3-17
[6] => 2014-3-18
[7] => 2014-3-19
[8] => 2014-3-25

)

вот эти даты мне нужно выводить так:
от 2014-3-9 - до 2014-3-12;
от 2014-3-16 - до 2014-3-19;
2014-3-25;

Я пишу компонент для сайта на CMS Joomla, с помощью которого пользователи будут бронировать номера в отеле. И мне нужно сделать эти сокращения для вывода, чтобы пользователю не выводить кучу дат, а указать что даты от и до он забронировал. Пользователь бронирует не строго период, а выбирает из календарика даты которые он хочет забронировать.
...
Рейтинг: 0 / 0
18.02.2014, 23:20
    #38565294
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
$test = array(
    0 => '2014-3-9',
    1 => '2014-3-10',
    2 => '2014-3-11',
    3 => '2014-3-12',
    4 => '2014-3-16',
    5 => '2014-3-17',
    6 => '2014-3-18',
    7 => '2014-3-19',
    8 => '2014-3-25'
);

$test2 = array(
0 => '2014-3-11',
1 => '2014-3-12',
2 => '2014-3-13',
3 => '2014-3-14',
4 => '2014-3-17',
5 => '2014-3-18',
6 => '2014-3-22'
);


echo '<pre>';
print_r(dateToInterval($test));
echo '</pre>';


echo '<pre>';
print_r(dateToInterval($test2));
echo '</pre>';


function dateToInterval($arr)
{
    $arrtm = array_map(
                    function($ar)
                    {
                        return strtotime($ar);
                    },
            $arr);
    
    for ($i=0; $i<count($arrtm); $i++)
    {   
        $j=1;
        
        while(array_search(strtotime($arr[$i].' +'.$j.' day'), $arrtm))
        {
            $k=array_search(strtotime($arr[$i].' +'.$j.' day'), $arrtm);
            $j++;
        }
    
        if ($j > 1)
        {
            $result[] = $arr[$i].' - '.$arr[$k];
            $i = $k;
        }
        else $result[] = $arr[$i];
    }
    return $result;
}



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Array
(
    [0] => 2014-3-9 - 2014-3-12
    [1] => 2014-3-16 - 2014-3-19
    [2] => 2014-3-25
)
Array
(
    [0] => 2014-3-11 - 2014-3-14
    [1] => 2014-3-17 - 2014-3-18
    [2] => 2014-3-22
)
...
Рейтинг: 0 / 0
19.02.2014, 00:32
    #38565331
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
SharuPoNemnogu,

Спасибо огромное добрый человек!! Облегчил мне жизнь))
...
Рейтинг: 0 / 0
19.02.2014, 15:05
    #38566258
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444,
Есть еще проблема, если в массиве даты идут от меньшей даты к большей то тогда все работает, а если даты идут в разброс например так:

[0] => 2014-3-13
[1] => 2014-3-12
[2] => 2014-3-11
[3] => 2014-3-10
[4] => 2014-3-9
[5] => 2014-3-19
[6] => 2014-3-18
[7] => 2014-3-17
[8] => 2014-3-16

то скрипт не работает, а подвисает. Скажите как можно отсортировать массив сначала по дате от меньшей к большей?, а потом уже обрабатывать вашей функцией.
...
Рейтинг: 0 / 0
19.02.2014, 15:24
    #38566296
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
Привести даты к формату с ведущими нулями, а потом sort().
...
Рейтинг: 0 / 0
19.02.2014, 17:54
    #38566610
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444,

Я писал на основе приведенных демо данных. Как написал vkle отсортируйте в нужном порядке.
...
Рейтинг: 0 / 0
22.02.2014, 14:30
    #38569422
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
paha4444Я пишу компонент для сайта на CMS Joomla, с помощью которого

И надо полагать даты на сервере живые, а не в этом бредовом тексте? Или в нем?

Так вот, либо храните нормально, либо конвертируйте в нормальный вид и тогда волонтеры отдохнут.

Потому что решаются такие задачи в СУБД через запросы по датам, диапазонм и группировкой по датам и диапазонам.
...
Рейтинг: 0 / 0
22.02.2014, 15:20
    #38569461
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
debloggerИ надо полагать даты на сервере живые, а не в этом бредовом тексте? Или в нем?Читайте внимательно, ТС написал же что даты приходят от клиента из календарика. Видимо, календарик такой :-)
...
Рейтинг: 0 / 0
22.02.2014, 16:29
    #38569503
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
vkle,

Читатайте документацию. От клиента приходит Х, а вы его должны превратить в нормализованные данные. Кажется это http://ru2.php.net/strtotime

ЗЫ И хватит за мной таскаться. Идите на лурк читать про баттхерт.
...
Рейтинг: 0 / 0
22.02.2014, 19:41
    #38569577
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
debloggerЗЫ И хватит за мной таскаться. Идите на лурк читать про баттхерт.Да не таскаюсь я за Вами. Увы, обязанность модератора - смотреть что пишите :-(


debloggervkle,

Читатайте документацию. От клиента приходит Х, а вы его должны превратить в нормализованные данныеЭто мне в данном случае к чему? Никому ничего я не должен превращать. Ни Вам, ни топикстартеру.
...
Рейтинг: 0 / 0
23.02.2014, 11:52
    #38569752
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Помогите написать функцию
vkle,

Странно, а помогать разбирать тексты которые должны быть числами входит в круг ваших обязанностей.
Модератор: Бан за оффтопик.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Помогите написать функцию / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]