![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Привет всем!
Есть вот такой модуль, вроде нормально работал до сих пор но при следующих значениях ерунда получается $data1=31.01.2007 $data2=02.02.2007 $diff получатся отриц. число
Пасибо Это сообщение отредактировал(а) meridian - 2.2.2007, 13:02 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Если уж совсем не хочется пользоваться специализированными модулями для работы с датами (Date::Manip, HTTP::Date), то нужно хотя бы преобразовать даты к тому формату, который подразумевает подпрограмма diffDates
Это сообщение отредактировал(а) amg - 2.2.2007, 13:48 |
|||
|
||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
поправочка, даты в таком формате ,т.е. как обрабатывается в пп
31-01-2007 12:19:47 #data1 02-02-2007 11:19:47 #data2 а меньше непонятно почему , т.к. из date2 вычитаем date1 ( если даты одного месяца, то все нормально ) Это сообщение отредактировал(а) meridian - 2.2.2007, 14:37 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Смотри внимательно подпрограмму: она требует формат "YYYY-MM-DD hh:mm:ss"
И если на неправильный формат даже не ругается, то не пользуйся такой подпрограммой! Есть же отличные модули для этого! Или, в крайнем случае, преобразуй дату:
Это сообщение отредактировал(а) amg - 2.2.2007, 14:52 |
|||
|
||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
С правильным форматом тоже самое
2007-01-31 12:19:47 #data1 2007-02-02 11:19:47 #data2 |
|||
|
||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Кстате, amq, если использовать Date::Manip,
достаточно будет при $date1 = "2007-01-31 12:19:47" $date2= "2007-02-02 11:19:47" использовать $delta = &DateCalc($date1,$date2); или нужно преобразоват даты ? |
|||
|
||||
| meridian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 8.11.2005 Репутация: нет Всего: нет |
Вот так сделал проверку дат
получаю разность в секундах
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
у меня обнаружился маленький косяк вот тут
если дата 22.12.2005 00:00:00 Month '12' out of range 0..11 Как это понимать ?? -------------------- менеджер по кодеврайтингу |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Bulat, массивы с 0 начинаются ... 0..11 = 12
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
nitr, я понимаю что массивы начинаются с нуля, и если дело только в этом, то как-то не красиво получается, если исчисления месяцов начниается с 1, а функция не понимает, что 12 месяц это декабрь.
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
return( timelocal( $seconds, $minutes, $hours, $days, $month-1, $year ) );
Добавлено через 45 секунд я не видел вашей функции, но думаю это вам поможет ;) |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
nitr, ну это-то понятно, просто на 31 число он так не реагирует же, вроде с днями все гуд, а вот с месяцами...
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Bulat, немного запутали (т.к. тема в теме), покажите функцию и вводимые данные, а то ничего неясно (я про комментарии) ;)
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Bulat, в документации к модулю Time::Local (я полагаю, функция timelocal оттуда?) сказано:
"The value for the day of the month is the actual day (ie 1..31), while the month is the number of months since January (0..11). This is consistent with the values returned from localtime() and gmtime()." Т.е. совет nitr'а - правильный (кто бы сомневался С годом сложнее, но если не нужны даты из далекого прошлого/будущего, то обычный формат YYYY типа 2005 будет восприниматься правильно, как и год, возвращаемый перловскими функциями localtime и gmtime (YYYY-1900). |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
amg, я ничего не говорю против совета nitr'а. И то что ты привел читал, но не совсем, лично мне понятно почему же месяцы от 0 отсчитываются, хотелось бы узнать причины, почему не с 1. Вот этого я не нашел.
-------------------- менеджер по кодеврайтингу |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |