Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2007, 17:07   #1
Doda
Пользователь
 
Регистрация: 21.11.2007
Сообщений: 64
По умолчанию время в JavaScript

Доброго времени суток.
Сразу прошу прощения если вопрос окажется тревиальным иил глупым. Я далеко не дока в программировании, но пытаюсь научиться...

Итак, суть вопроса.

Задача - используя JavaScript получить текущее системное время, а именно его "часовую" часть (без даты, минут и секунд), а затем, через некоторое время (скажем 10 сек), повторить операцию.
Цель - узнать не было ли системное время изменено принудительно за данный промежуток времени.
Код:
time.js
Код:

var wshShell = WScript.CreateObject ("WScript.Shell");
var timeNow;
var timeNow1;
var timeNow2;
var delta = 0;

//получение текущего времени и выделение количества часов
function time(){
 t = new Date();
 timeNow = t.getHours();
}

 //получаем время
time();
timeNow1 = timeNow;
wshShell.Popup("t="+t, 5, "Alert", 48 );
wshShell.Popup("timeNow1="+timeNow1, 5, "Alert", 48 );

//ждем 10 сек и за это время переводим системные часы
WScript.Sleep (10000);

//получаем время повторно
 time();
timeNow2 = timeNow;

//высчитываем разницу 
if (!(timeNow2 = timeNow1)) {
delta = timeNow2 - timeNow1;
}


//смотрим значение всех использованных переменных
wshShell.Popup("t="+t, 5, "Alert", 48 );
wshShell.Popup("timeNow1="+timeNow1, 5, "Alert", 48 );
wshShell.Popup("timeNow2="+timeNow2, 5, "Alert", 48 );
wshShell.Popup("delta="+delta, 5, "Alert", 48 );
Проблема - переменная t, значение которой выводится дважды: до изменения времени и после, обновляется, время в ней актуально. Однако переменной timeNow2 не присваивается новое значение. Ее значение равно значению переменной timeNow1.
Вопрос - ПОЧЕМУ?

Последний раз редактировалось Doda; 22.11.2007 в 09:55.
Doda вне форума Ответить с цитированием
Старый 21.11.2007, 19:24   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

А зачем извращаться с WSH? Такие задачи вполне можно решить штатными средствами чистого JS
SkyM@n вне форума Ответить с цитированием
Старый 21.11.2007, 20:38   #3
Doda
Пользователь
 
Регистрация: 21.11.2007
Сообщений: 64
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
А зачем извращаться с WSH? Такие задачи вполне можно решить штатными средствами чистого JS
Согласен, можно.
Однако WSH здесь используется только для вывода информации о значених переменных в определенный момент времени. Но вопрос не в оптимизации скрипта, а в том, почему Date() возвращает актуальное значение переменной t при втором вызове функции time(), но t.getHours() берет часы из старого.
Doda вне форума Ответить с цитированием
Старый 23.11.2007, 00:31   #4
Doda
Пользователь
 
Регистрация: 21.11.2007
Сообщений: 64
По умолчанию

Вопрос исчерпан, проблема решена оптимизацией кода, хотя в чем была бага так и не понял.
Doda вне форума Ответить с цитированием
Старый 31.01.2012, 12:56   #5
Николай1609
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 1
По умолчанию Зачем так все усложнять

var t_now
var t_after
function timeNow()
{
t_now = new Date(milliseconds);
alert("Время сейчас"+t )
}
function timeAfter()
{
t_after = new Date(milliseconds);
alert("Время через 10 секунд"+t)
}
function check_time()
{
timeNow();
setTimeout("timeAfter()", 10000);
if (t_now+10000 != t_after) alert("Системное время было изменено!!")
}
Николай1609 вне форума Ответить с цитированием
Старый 31.01.2012, 22:47   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Зачем так все усложнять
ваш код не работает. Наверное потому что...
Код:
var t_now    // две операции определения переменных, не разделенных точкой с запятой... 
var t_after  // ну, просто эстетически как-то не красиво... 
function timeNow()
{
t_now = new Date(milliseconds); // переменная milliseconds не определена
// миллисекунды юникс-времени получаются так: 
/*
 var t = new Date();
 t = t.getTime();
*/
alert("Время сейчас"+t ) // переменная t не определена
// видимо, подразумевалось t_now
}
function timeAfter()
{
t_after = new Date(milliseconds); // переменная milliseconds не определена
alert("Время через 10 секунд"+t) // переменная t не определена
}
function check_time()
{// да и фиг с этими дурацкими особенностями js, нам важен алгоритм, идея!
timeNow(); /* запускаем функцию, получаем штамп времени, а дальше...
  а дальше пользователю выплевывается алерт, который останавливает выполнение скрипта
  достаточно промедлить 1 миллисекунду и "Системное время было изменено!!"
  хотя нет. Дальше интереснее:
*/
setTimeout("timeAfter()", 10000); /* создаем таймаут - по прошествии 10 секунд выполнится функция timeAfter
  все круто, только вот скрипт отложит эту функцию и продолжит выполняться дальше =)
*/
if (t_now+10000 != t_after) alert("Системное время было изменено!!")// "Системное время было изменено!!"
// хотя бы потому, что t_now - undefined
// а еще потому, что нельзя закрыть алерт меньше чем за 1 миллисекунду))
}
Кстати, тут еще не учитывается погрешность от мощности и загруженности процессора, браузера, да и того факта, что выполнение любой операции занимает положительное время.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript: random PAVEL315 JavaScript, Ajax 1 13.01.2008 13:32
Трассировщик JavaScript kuguar JavaScript, Ajax 5 23.11.2007 17:17
PHP VS Javascript vitalik007 Свободное общение 3 16.11.2007 18:05