powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Помогите написать функцию
15 сообщений из 15, страница 1 из 1
[PHP] Помогите написать функцию
    #38565082
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть список дат

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
[PHP] Помогите написать функцию
    #38565112
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paha4444,

Язык программирования и способ предоставления входных данных (списка) и выходных можно выбрать по личным предпочтениям? ;-)
...
Рейтинг: 0 / 0
[PHP] Помогите написать функцию
    #38565117
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет(, эти даты я получаю из HTML формы методом POST, мне нужно это реализовать на PHP
...
Рейтинг: 0 / 0
[PHP] Помогите написать функцию
    #38565143
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paha4444эти даты я получаю из HTML формы методом POSTДругими словами, где-то в переменной Вы имеете простой текст, по одной дате на строку. Верно?
...
Рейтинг: 0 / 0
[PHP] Помогите написать функцию
    #38565158
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет нет, я получаю массив с датами.
(
[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
[PHP] Помогите написать функцию
    #38565294
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
[PHP] Помогите написать функцию
    #38565331
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

Спасибо огромное добрый человек!! Облегчил мне жизнь))
...
Рейтинг: 0 / 0
[PHP] Помогите написать функцию
    #38566258
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
[PHP] Помогите написать функцию
    #38566296
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привести даты к формату с ведущими нулями, а потом sort().
...
Рейтинг: 0 / 0
[PHP] Помогите написать функцию
    #38566610
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paha4444,

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

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

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

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

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

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


debloggervkle,

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

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


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