Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / туплю с разбивкой временного отрезка на N равных / 16 сообщений из 16, страница 1 из 1
03.05.2012, 16:04:12
    #37780740
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
В общем задача следующая :

нужно для построений графиков написать функцию которая бы делила временной отрезок на 10 равных.
заранее прошу сильно не судите строго за корявый код php, я тут новичок.
пытаюсь так :

Код: 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.
function mdate_diff($date1, $date2) //функция даёт число секунд между 2-мя датами
{
    $diff = strtotime($date2) - strtotime($date1);
    return abs($diff);
}

function get_data_for_chart ($D1,$D2)
{
    global $db, $param;
 $T1= '00:00:00';
 $T2= '00:00:00';
if ((is_null ($D1)==='true'   ) or ($D1==''))  {$D1='03.05.2004';}
if ((is_null ($D2)==='true'  ) or  ($D2==''))  {$D2='04.05.2045' ;}
$D1_M= explode('.',$D1);
$T1_M= explode(':',$T1);
$D2_M= explode('.',$D2);
$T2_M= explode(':',$T2);
$S = mdate_diff($D1.' '.$T1,$D2.' '.$T2); 
$Num_of_div=10; // число разбиений
   $R='';

$Offs=$S/$Num_of_div; //смещение в секундах

for ($i = 0; $i <= $S; $i=$i+$Offs) 
{
//$dates[$I1]= date("M-d-Y H-i-s", mktime ($T1_M[0],$T1_M[1],0+$i,$D1_M[1],$D1_M[0],$D1_M[2]));
$dates[$I1]= date("M-d-Y H-i-s", mktime ($T1_M[0],$T1_M[1],0+$i,$D1_M[1],$D1_M[0],$D1_M[2]));  
$R= $R. $S.' '.$dates[$I1].chr(13) ; // это так для теста
$I1++;
}
result $dates
}




а результат почему - то такой :


May-03-2004 00-00-00
Jun-08-2008 14-30-00
Jul-15-2012 05-00-00
Aug-20-2016 19-30-00
Sep-26-2020 10-00-00
Nov-02-2024 00-30-00
Dec-08-2028 15-00-00
Jan-14-2033 05-30-00
Feb-19-2037 20-00-00
Mar-28-2041 10-30-00
May-04-2045 01-00-00

последняя дата должна быть May-04-2045 00-00-00.
откуда лишний час - 01 ?

ну или кто - нибудь уже решал подобную задачу ? предложит свой алгоритм решения ?
...
Рейтинг: 0 / 0
03.05.2012, 16:42:00
    #37780844
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
переведите в unixtime, разделите отнимете, прибавьте, переведите обратно.
...
Рейтинг: 0 / 0
03.05.2012, 16:53:18
    #37780885
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
Hettпереведите в unixtime, разделите отнимете, прибавьте, переведите обратно.



а где вы советуете перевести в unixtime . я разве не перевожу mktime - ом ?
...
Рейтинг: 0 / 0
03.05.2012, 16:57:54
    #37780893
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
Вот что получилось у меня)
Код: 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.
$time_first = mktime(00,00,00,01,01,2000);
$time_second = mktime(00,00,00,01,01,2010);

// Разница во времени 
$diff = $time_second - $time_first;

// Кол-во делений
$count_division = 10;

// Смещение
$offset_time = $diff / $count_division;

$time_array = array(); 

// Занесём все значения в массив
for($i = 0; $i <= $count_division; $i++){
    $time_array[$i] = date("Y-M-d H:i:s", $time_first);
    
    // Прибавляя смещение
    $time_first += $offset_time;
}

echo '<pre>';
print_r($time_array);
echo '</pre>';


Вроде всё работает, а по вашему коду, я вообще не понимаю как он выводит 45 год? Unix время в 38 истекает)))Такого быть не может. как то вы всё сложно делаете)
...
Рейтинг: 0 / 0
03.05.2012, 17:07:46
    #37780919
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
qwerty1992Вот что получилось у меня)
Код: 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.
$time_first = mktime(00,00,00,01,01,2000);
$time_second = mktime(00,00,00,01,01,2010);

// Разница во времени 
$diff = $time_second - $time_first;

// Кол-во делений
$count_division = 10;

// Смещение
$offset_time = $diff / $count_division;

$time_array = array(); 

// Занесём все значения в массив
for($i = 0; $i <= $count_division; $i++){
    $time_array[$i] = date("Y-M-d H:i:s", $time_first);
    
    // Прибавляя смещение
    $time_first += $offset_time;
}

echo '<pre>';
print_r($time_array);
echo '</pre>';


Вроде всё работает, а по вашему коду, я вообще не понимаю как он выводит 45 год? Unix время в 38 истекает)))Такого быть не может. как то вы всё сложно делаете)

действительно рабочий вариант. А почему Unix время в 38 истекает ?
...
Рейтинг: 0 / 0
03.05.2012, 17:14:55
    #37780938
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
andron81,

Потому что закодированно оно 4 байтами, то есть максимальное число в восьмиричной сс это "0x77777777"? так уж сделали когда его создавали, то есть вы можете посмотреть функцией
Код: php
1.
echo date("Y-M-d H:i:s", 0x77777777);


Когда оно закончится) Или поставить все нули, чтоб узнать когда его придумали) Почитайте в интернете если вам интересно)
...
Рейтинг: 0 / 0
03.05.2012, 17:21:31
    #37780957
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
andron81,

Поэтому не используйте юникс время меньше 1970 и больше 2037. Будет бред)
...
Рейтинг: 0 / 0
03.05.2012, 17:34:04
    #37780984
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
qwerty1992,

сейчас многие переходят на 64х процессоры, так что таймстамп относительно неограничен
...
Рейтинг: 0 / 0
03.05.2012, 17:40:19
    #37781003
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
artas,

не совсем в этом дело) Вообщем не замарачивайтесь) А можно вопрос давно прогаете на php?
...
Рейтинг: 0 / 0
03.05.2012, 19:34:21
    #37781162
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
qwerty1992artas,

не совсем в этом дело) Вообщем не замарачивайтесь) А можно вопрос давно прогаете на php?

если вопрос ко мне , я 3 месяца ))
...
Рейтинг: 0 / 0
03.05.2012, 19:44:04
    #37781168
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
artasqwerty1992,

сейчас многие переходят на 64х процессоры, так что таймстамп относительно неограничен

может быть вы и правы. грубо говоря "на моём хостинге" решение qwerty1992 работает и для отрезка :


Код: php
1.
2.
$time_first = mktime(21,00,00,01,05,2012);
$time_second = mktime(21,01,00,01,05,2080);



вот полюбуйтесь :

2012-Jan-05 21:00:00
201ct-24 14:48:06
2025-Aug-12 07:36:12
2032-May-31 00:24:18
2039-Mar-19 16:12:24
2046-Jan-05 09:00:30
2052-Oct-24 01:48:36
2059-Aug-12 18:36:42
2066-May-31 11:24:48
2073-Mar-19 04:12:54
2080-Jan-05 21:01:00
))))
...
Рейтинг: 0 / 0
03.05.2012, 23:05:09
    #37781297
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
andron81,

Интересно, а попробуйте ввести вместо года какое либо большое число, наподобие этого: 99999999999999999999999999
...
Рейтинг: 0 / 0
03.05.2012, 23:07:16
    #37781300
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
andron81,

Да вопрос был к вам) У меня вот тоже третий месяц закончился)
...
Рейтинг: 0 / 0
04.05.2012, 07:58:13
    #37781460
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
qwerty1992andron81,

Да вопрос был к вам) У меня вот тоже третий месяц закончился)

видимо я менее сообразителен )))
...
Рейтинг: 0 / 0
04.05.2012, 13:34:16
    #37782007
qwerty1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
andron81,

нет. Я толком не умею програмить, но взял с себя слово что буду следовать советам мак коннелла(Совершенный код)
...
Рейтинг: 0 / 0
05.05.2012, 06:48:33
    #37783071
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
туплю с разбивкой временного отрезка на N равных
qwerty1992andron81,

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


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