MMGP logo
Присоединяйтесь к нашему инвестиционному форуму, на котором уже 642,037 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение - зарегистрируйтесь прямо сейчас.
Все, что относится к Web-Программированию (PHP, Perl, JavaScript, MySQL, XML и т.д.)
Старый 19.03.2008, 09:45
#1
Интересующийся
 
Пол: Мужской
Адрес: UA
Инвестирую в: HYIP Фонды
Регистрация: 14.05.2007
Сообщений: 140
Благодарностей: 0
Скрипт Осталось дней до... (22)

Цитата:
<SCRIPT language=JavaScript>
<!--
d0 = new Date();
d1 = new Date('January 10, 2009');
dt = (d1.getTime() - d0.getTime() ) / (1000*60*60*24);
document.write('Осталось <font size=6><B>' + Math.round(dt) + '</B></size>-дней.');
-->
</SCRIPT>
Я посчитал вручную этот скрипт ошибается ровно на 22 дня. Пробовал поправить это дописав после d0.getTime() + 22 не помогло( Я так понял скрипт ошибается из за того что не умеет автоматически переходить на летнее время и обратно ? Помогите как-то это исправить...

Цитата:
<SCRIPT language=JavaScript>
<!--
d0 = new Date('May 19, 1989');
d1 = new Date();
dt = (d1.getTime() - d0.getTime()) / (1000*60*60*24);
document.write('Я живу <font size=6><B>' + Math.round(dt) + '</B></size>-й день.');
-->
</SCRIPT>
И если тот ошибается значит и этот тоже - сколько я прожил дней. Только чтоб проверить правильность этого скрипта уйдет пару часов...
xHamer вне форума
Старый 19.03.2008, 11:57
#2
Специалист
 
Пол: Мужской
Регистрация: 02.10.2007
Сообщений: 837
Благодарностей: 163
попробуй использовать .getTimezoneOffset() вместо .getTime()
функция берет время с учетом сдвига по часовому поясу и т.к. jscript выполняется в браузере посетителя, то и будет срабатывать только у кого включен "Автоматический переход на летнее время и обратно"

среднеевропейское время CET, опережает GMT на один час в зимний период и на 2 часа - в летний, так же и ваше местное время
okyl вне форума
Старый 19.03.2008, 21:06
#3
Интересующийся
 
Пол: Мужской
Адрес: UA
Инвестирую в: HYIP Фонды
Регистрация: 14.05.2007
Сообщений: 140
Благодарностей: 0
okyl
Я так понял использовать .getTimezoneOffset() нужно только вместо
в первом скрипте d0.getTime()
в втором d1.getTime()
Бо если заменить оба .getTime() на .getTimezoneOffset() будет - Осталось 0-днів, Я живу 0 днів.(учитивать Автоматический переход на летнее время и обратно имеет смысл только для текущей даты(dx = new Date())

Для второго скрипта вроде нормально подкоректировалась дата(+198 дней )

А вот в первом скрипте после изменения d0.getTime() на d0.getTimezoneOffset() стало Осталось 14254 дней (до 10 января 2009) (:
xHamer вне форума
Старый 19.03.2008, 23:25
#4
Интересующийся
 
Пол: Мужской
Адрес: UA
Инвестирую в: HYIP Фонды
Регистрация: 14.05.2007
Сообщений: 140
Благодарностей: 0
okyl, Я немного разобрался все ровно не могу понять как так может бить:
Цитата:
<SCRIPT language=JavaScript>
<!--
Today = new Date();
Sobitie = new Date('January 10, 2009');
dt = (Sobitie.getTime() / (100*60) - Today.getTimezoneOffset()) / (60*24);
document.write('До собития осталось <B>' + Math.round(dt) + '</B>-дней(дня).');
-->
</SCRIPT>
getTime - возвращает дату в милисекундах
getTimezoneOffset - возвращает дату в минутах
1000 милисекунд - 1 секунда

Sobitie.getTime() / (100*60) - перевожу в минути дату
Sobitie - Today - узнаю сколько в минутах осталось до события

и в результате:
/ (60*24) - делю и узнаю сколько осталось дней до события, должно бить 3XX дней а в результате
тоже - До события осталось 14254-дней(дня).

Последний раз редактировалось xHamer; 19.03.2008 в 23:49.
xHamer вне форума
Старый 24.03.2008, 23:30
#5
Специалист
 
Пол: Мужской
Регистрация: 02.10.2007
Сообщений: 837
Благодарностей: 163
Цитата:
Сообщение от xHamer Посмотреть сообщение
Цитата:
<SCRIPT language=JavaScript>
<!--
d0 = new Date();
d1 = new Date('January 10, 2009');
dt = (d1.getTime() - d0.getTime() ) / (1000*60*60*24);
document.write('Осталось <font size=6><B>' + Math.round(dt) + '</B></size>-дней.');
-->
</SCRIPT>
Я посчитал вручную этот скрипт ошибается ровно на 22 дня. Пробовал поправить это дописав после d0.getTime() + 22 не помогло( Я так понял скрипт ошибается из за того что не умеет автоматически переходить на летнее время и обратно ? Помогите как-то это исправить...
какие 22 дня?
у меня этот скрипт все правильно считает. я посчитал по календарю недели и перемножил на 7 плюс дни внутри текущей и последней недели

накидал свой скрипт считает точно так же:

Цитата:
<SCRIPT LANGUAGE="javascript">

today = new Date();
BigDay = new Date("January 10, 2009")
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (BigDay.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60);
document.write( "До 10 января 2009 года<br>осталось <b>"+daysLeft+"</b> дней(дня), <b>"+hrsLeft+"</b> часов и <b>"+minsLeft+"</b> минут");

</SCRIPT>
ты где-то ошибся в ручных подсчетах. до события даже ориентировочно не может быть 3XX дней, т.к. даже примерно вычитая из 365 - (~30*3=90) (январь,февраль,март) будет менее 300

Последний раз редактировалось okyl; 24.03.2008 в 23:34.
okyl вне форума
Сказали спасибо:
xHamer (25.03.2008)
Старый 25.03.2008, 19:11
#6
Интересующийся
 
Пол: Мужской
Адрес: UA
Инвестирую в: HYIP Фонды
Регистрация: 14.05.2007
Сообщений: 140
Благодарностей: 0
Все таки на один день точно ошибается(
жаль что с .getTimezoneOffset() не работает (:

март(6)+апрель(30)+май(31)+июнь(30)+июль(31)+авгус т(31)+сентябрь(30)+октябрь(31)+ноябрь(30)+декабрь( 31)+январь(10)=291 день.
xHamer вне форума
Старый 26.03.2008, 05:30
#7
Специалист
 
Пол: Мужской
Регистрация: 02.10.2007
Сообщений: 837
Благодарностей: 163
Цитата:
Сообщение от xHamer Посмотреть сообщение
Все таки на один день точно ошибается(
это проблема не программного метода, а разработчика, который задает логику.
скрипт просто включает в подсчитываемое количество дней и текущий день.
ты должен сам определиться и задать логику либо включать текущий день и последний день в подсчет либо нет.

тем более если ты берешь до заданного дня - 10 января, то 10 января в подсчет не входит, т.е. событие 10 января наступает через секунду после 9 января 23:59:59

у тебя условие до
okyl вне форума
Войдите, чтобы оставить комментарий.
Опции темы

Быстрый переход