| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > таймер, отсчёт времени, проблемы с летним время |
| Автор: ressac 3.2.2008, 09:51 | ||
| работает криво, например если выставить финальную дату до 30 Марта (включительно) то всё ОК, но как только ставлю 31 Марта или 1 Аперля то куда-то исчезает один Час.... и вот я думаю - это вероятно из за перехода на летнее время! и как быть теперь? тойсть хочу чтоб он отнимал тот самый час во время перехода , но ни как до него
|
| Автор: ressac 3.2.2008, 11:48 |
| тут появилась идея добавить ещё год и месяц, только не выходит... помощь? |
| Автор: ressac 3.2.2008, 17:39 | ||
| вот, написал ещё раз прошу кого-то проверить алгоритм... плиз
|
| Автор: ksnk 3.2.2008, 21:24 |
| Работает, неправильно... Код утверждает, что между 2008/1/3 21:18:00 и 2008/3/1 0:0:0 пройдет ... 1 час ... в то время как пройдет ... 2 ... ;) Видите ли, день перевода времени - это такой странный день, типа февраля, в нем 23 или 25 часов вместо 24-x. и работать с ним нужно столь-же загадочно как и с месяцами... |
| Автор: ressac 3.2.2008, 21:54 |
| ksnk, да, я об этом выше говорил, так выходит из-за перехода не летнее время. на самом деле показывает он точно, просто в момент перехода (30 марта) он два часа повторит, попробуй выставить у себя 30 марта |
| Автор: ksnk 3.2.2008, 22:01 | ||||
Ну что-ж тогда вот - правильный вариант
Ну и вставлять его в код
Кстати - перевод времени будет с 29 марта по 30... Добавлено через 1 минуту и 37 секунд Между 5 часов 29 марта и 6 часов 30 марта пройдет 1 день и 1 час Добавлено через 4 минуты и 30 секунд Хотя в день перевода дат я тоже заглючу... :( |
| Автор: SelenIT 3.2.2008, 22:28 |
Сорри, а это когда? |
| Автор: ksnk 3.2.2008, 22:34 |
| SelenIT, Oops! Стормозил. Это день перевода часов на летнее время... |
| Автор: ressac 4.2.2008, 00:10 |
| ksnk, не понял ни принцип кода ни ход работы, у меня было на часах 22:00 , твой код вывел на экран "3" и всё ... вот тут финальная версия ressac.110mb.com единственный "ГЛЮК" это то что до перехода на летнее время день кончается на ЧАС раньше, так что как это решить [B]вопрос остаётся открытым |
| Автор: ksnk 4.2.2008, 00:57 |
http://ksnk.dpb.ru/test/time.html? Там еще табличка для проверки разности между датами... 6 строк таблицы вставляются в Date(1,2,3,4,5,6)... Кстати, наши таймеры отличаются на час... ;-) Добавлено @ 01:06 В добавок он не глючит при переходе на летнее время. Просто я проверял разницу между 2008/3/30:1 ночи, а время переводят с часа сразу на 2... |
| Автор: ksnk 4.2.2008, 01:39 |
| Принцип функция daydiff: получает даты d1 и d2. Для каждой из них последовательно применяем функции getSeconds, getMinutes,... getYear получаем на каждой итерации число _1 и _2. Если _1 меньше, чем _2, добавляем к _1 (d1.setXXX(-1)).getXXX()+1. В результате этой магии получаем 59+1 для секунд/минут и 29 дней для февраля этого года. В добавок этой-же магией автоматически учитываются "заемные" значение, к примеру разница 10:0 и 9:59 выдаст 0 и 59 секунд, после магии первая дата станет 9:59. Результат - 1 секунда... На каждой итерации в результирующий объект сваливаем то, что получилось под соответствующим именем. функция timer использует daydiff для размещения результатов ее работы в нужном месте. Остальная магия служит для связки слов в предложении и для излишней оптимизации Добавлено через 2 минуты и 46 секунд Кстати, если прислушаться к совету SelenIT, и указать "начальную" дату в GMT формате, то пользователи в Америке не будут удивлены странной датой начала мероприятия... ;-) |
| Автор: ressac 4.2.2008, 19:30 | ||
да тут видно всё хорошо НО у тебя почему-то на один ДЕНЬ больше выходит, не считай тот день в котором Мы находимся сейчас. так как он ведь уже не полный ДЕНЬ... плюс не понятки у тебя с вводом данных, тот что внизу показывает точно , а тот что в верху - не точно, например я выставил 30 марта и он показал 0 дней.
у меня разве глючит? у меня просто два раза один час прокручивает... |
| Автор: ksnk 4.2.2008, 20:38 | ||||||
| Не понял ;) вот тестовый замер
к нижней дате прибавляем +2 месяца = 03 марта +3 + 3 недели*7 +5 дней=29 марта + 1 час = 30 марта... Где-то что-то неправильно считается? Или на других датах чего-то неправильное? Проще делать такие слепки Оперой, она позволяет из окна alert'а копировать... Добавлено через 2 минуты и 5 секунд
Это непонятки, чего вводилось в каждое поле? Добавлено через 4 минуты и 34 секунды
Это как это, между 23:00 сегодня и 23:00 завтра пройдет 0 дней? |
| Автор: ressac 4.2.2008, 21:18 | ||
30 марта 17:00 , и на локальных часах у себя туже дату ставил и был разный результат.
нет пройдёт 1 день, но если 23:01 сегодня и завтра 23:00 то пройдёт уже 0 дней и 23:59 часа |
| Автор: ksnk 5.2.2008, 00:14 | ||||||
Как можно заметить - я совершенно с этим не спорю ;-)
Правильно ли я понял, что 30 марта в 17:00 счетчик покажет, что осталось 0 дней++ до 31 марта 0:0? Почему это считается неправильным? В общем - в странности работы счетчика я не убежден. Чего, казалось бы проще - скопировать тестовую пару дат и сказать что вот тут считается фигня-с. Почему бы это не сделать ;) Особенно, если учесть, что этот счетчик нужен, вообще говоря, совсем даже не мне |
| Автор: ressac 5.2.2008, 00:39 |
| .... вы не правильно меня поняли или я вас, это не важно даже уже, зачем ссорится ну странности вот: сейчас он показывает что осталось 3 недели и 6 дней(это по тому что через форму выдаёт), а на динамическом 3 недели и 5 дней - а на самом деле 3 недели и 4 дня проблемы с февралём есть, например ставлю дату 29 февраля 2008 года и выдаёт что ещё 1 месяц и 2 дня, откуда два дня? ещё видел проблемы...с неделями вроде... вообщем я не придираюсь к твоему коду, ты меня не правильно понял. забудь кстати в моём случае придумал решение что до 30 марта просто буду прибавлять час и всё p.s. у нас разные часовые пояса, может быть по этому... хотя не думаю |
| Автор: ksnk 5.2.2008, 01:51 | ||
Угу... Теперь - убедительно ;-) Вот это - баг... будем ковырять. Добавлено через 2 минуты и 11 секунд C днями ничего более здравого пока не приходит в голову, кроме как прибавлять по одному, пока не станут равными... Хмм..ю Идея дурная, но сработает... |
| Автор: ksnk 5.2.2008, 02:24 |
| Опять торможу... от 29 февраля до 29 марта - 1 месяц. До 31-го еще 2 дня... А в чем прикол? ладно спать пойду... |
| Автор: SelenIT 5.2.2008, 04:40 | ||||||||
Вот http://phpclub.ru/talk/showthread.php?postid=754951#post754951 алгоритму ksnkа делали на PHP (кстати, там и обсуждение небесполезное;). Для "перевода" на JS, по идее, достаточно убрать "доллары" и заменить
и
А недели, имхо, можно "тупо" получить из дней как Math.floor(days/7), сами дни - соответственно как days%7... |
| Автор: ksnk 5.2.2008, 12:26 |
| К сожалению, проверка алгоритма "отнимания столбиком" двух чисел с цифрами разных размерностей не выявила багов... Возможно, часть "глюков" объясняется тем, что функция считала время до 1 апреля, а не до 30-го марта. http://ksnk.dpb.ru/test/time.html все даты выводятся на экран, так что если глюк будет виден - желательно его сюда скопировать и запостить. "Калькулятор" тоже выводит разницу дат на экран. При наличии глюка - буду рад его увидеть. Добавлено @ 12:29 SelenIT, В принципе, там делается то-же самое, просто "а мужики-то не знали", что если поставить -1 в соответствующий параметр даты - появится "максимальное" этого параметра значение. Так что им пришлось помнить все параметры минут и часов, а мне - вот - нет |
| Автор: ressac 5.2.2008, 15:46 |
| 1st time: Tue Apr 01 2008 00:00:00 GMT+0200 2 nd time:Sun Mar 23 2008 23:44:00 GMT+0100 sec:0 min:16 hours:23 days:0 month:0 year:0 weeks:1 ну так теперь у тебя тоже самое что и у меня.. на час раньше Добавлено через 1 минуту и 48 секунд 1st time: Tue Apr 01 2008 00:00:00 GMT+0200 2 nd time:Sun Mar 23 2008 22:44:00 GMT+0100 sec:0 min:16 hours:0 days:1 month:0 year:0 weeks:1 |
| Автор: ksnk 5.2.2008, 23:48 |
| Объяснение странному пропаданию одного часа я , вроде отыскал, хотя объяснение шаманское... Я использовал функции UTCxxx, по наводке Selenit'а. Когда вернул на локализованные - час нашелся... Добавлено через 1 минуту Нешаманское объяснения сему странному факту пока не отыскалось... Добавлено через 6 минут и 19 секунд нашлось... Дневное время - GMT+4 для моего пояса, зимнее - GMT +3, а UTC - это GMT+0, так что час отнимался "законно" ;-)... с точки зрения гринвичского меридиана... |
| Автор: ressac 11.2.2008, 23:30 |
| ksnk, привет только что делал этот-же сабж только на PHP зашёл сверить время с твоим и вышло у тебя следущее.... 1st time: Tue Apr 01 2008 00:00:00 GMT+0200 2 nd time:Mon Feb 11 2008 23:00:00 GMT+0100 sec:0 min:0 hours:1 days:6 month:1 year:0 weeks:2 у меня получается лет 0 мес. 1 нед. 2 дни 4 часы 1 ... хз, может что-то я спутал как всегда... перепроверь свой. два дня меньше должно быть |
| Автор: ksnk 12.2.2008, 00:06 |
| Через 2 недели от 11-го февраля будет 25-е, через месяц - 25-е марта, еще через 6 дней (31 день в марте ;-) ) будет 1 апреля Добавлено через 3 минуты и 23 секунды Хотя, с какого месяца считать?... Это вопрос... Добавлено через 5 минут и 16 секунд Я от 1 апреля отнимаю 11 февраля, вот и получается такая разница... Нужно бы чего-то другое делать... |
| Автор: ksnk 12.2.2008, 01:30 |
| Угу! Я тормоз... сейчас и у меня от 11 марта до 1 апреля 1 месяц, 2 недели и 4 дня... Сейчас, надеюсь, правильно! |