С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 2

Почему функция не срабатывает каждую секунду, а выводит только первый результат?

17.02.2019, 18:57. Показов 1634. Ответов 8

Студворк — интернет-сервис помощи студентам
HTML5
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <script>
    var myTime = new Date();
var myDate = myTime.getDate();
var myMonth = myTime.getMonth();
var myYear = myTime.getFullYear();
var myDay = myTime.getDay();
var myHour = myTime.getHours();
var myMinutes = myTime.getMinutes();
var mySeconds = myTime.getSeconds();
var $hours;
var $minutes;
var $seconds;
 
function showMeDate(myDate,myMonth,myYear,myDay,myHour,$hours,myMinutes,$minutes,mySeconds,$seconds) {
var myDate = myTime.getDate();
var myMonth = myTime.getMonth();
var myYear = myTime.getFullYear();
var myDay = myTime.getDay();
var myHour = myTime.getHours();
var myMinutes = myTime.getMinutes();
var mySeconds = myTime.getSeconds();
var $hours;
var $minutes;
var $seconds;
 
if (mySeconds == 1 || mySeconds == 21 || mySeconds == 31 || 
    mySeconds == 41 || mySeconds == 51) {
    $seconds = 'сeкунда';
} else if (mySeconds >= 2 && mySeconds <= 4 || 
    mySeconds >= 22 && mySeconds <= 24 ||
    mySeconds >= 32 && mySeconds <= 34 ||
    mySeconds >= 42 && mySeconds <= 44 ||
    mySeconds >= 52 && mySeconds <= 54) {
    $seconds = 'секунды';
} else {
    $seconds = 'секунд';
};
 
if (myMinutes == 1 || myMinutes == 21 || myMinutes == 31 || 
    myMinutes == 41 || myMinutes == 51) {
    $minutes = 'минута';
} else if (myMinutes >= 2 && myMinutes <= 4 || 
    myMinutes >= 22 && myMinutes <= 24 ||
    myMinutes >= 32 && myMinutes <= 34 ||
    myMinutes >= 42 && myMinutes <= 44 ||
    myMinutes >= 52 && myMinutes <= 54) {
    $minutes = 'минуты';
} else {
    $minutes = 'минут';
};
 
if (myHour == 1 || myHour == 21) {
    $hours = 'час';
} else if (myHour >= 2 && myHour <= 4 ||
    myHour >= 22 && myHour <= 24) {
    $hours = 'часа';
} else {
    $hours = 'часов';
};
 
if (myMonth == 0) {
    myMonth = 'января';
} else if (myMonth == 1) {
    myMonth = 'февраля';
} else if (myMonth == 2) {
    myMonth = 'марта';
} else if (myMonth == 3) {
    myMonth = 'апреля';
} else if (myMonth == 4) {
    myMonth = 'мая';
} else if (myMonth == 5) {
    myMonth = 'июня';
} else if (myMonth == 6) {
    myMonth = 'июля';
} else if (myMonth == 7) {
    myMonth = 'августа';
} else if (myMonth == 8) {
    myMonth = 'сентября';
} else if (myMonth == 9) {
    myMonth = 'октября';
} else if (myMonth == 10) {
    myMonth = 'ноября';
} else {
    myMonth = 'декабря';
};
 
if (myDay == 0) {
    myDay = 'воскресение';
} else if (myDay == 1) {
    myDay = 'понедельник';
} else if (myDay == 2) {
    myDay = 'вторник';
} else if (myDay == 3) {
    myDay = 'среда';
} else if (myDay == 4) {
    myDay = 'четверг';
} else if (myDay == 5) {
    myDay = 'пятница';
} else {
    myDay = 'суббота';
};
return ('Сегодня ' + myDate + ' ' + myMonth + ' ' + myYear + ' года, ' + 
        myDay + ', ' + myHour + ' ' + $hours + ' ' + myMinutes + ' ' + $minutes + ' ' + mySeconds
         + ' ' + $seconds + '!');
 
}
 
setInterval('console.log(showMeDate (myDate,myMonth,myYear,myDay,myHour,$hours,myMinutes,$minutes,mySeconds,$seconds))', 1000);
 
function showMessage()
{
 
  showMeDate (myDate,myMonth,myYear,myDay,myHour,$hours,myMinutes,$minutes,mySeconds,$seconds);
  alert(showMeDate ());
 
}
    </script>
</head>
<body>
    <div>
        <input type="button" value="Show Date" id="show" onClick="showMessage();">
    </div>
</body>
</html>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2019, 18:57
Ответы с готовыми решениями:

Почему функция putchar(); выводит только первый символ?(Короткий код)
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int c; c=getchar(); putchar(c); getch(); }

Почему функция срабатывает только 1 раз
Тесть после 5 сек выводится google но через следующие 5 сек почемуто google так и остается а должно вывести Поиск.... Помогите...

Срабатывает только первый if из if\else
Копаясь в интернете на предмет интересующей меня информации про операторы if\else, наткнулся вот на такой вот код: using System; ...

8
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
17.02.2019, 20:01
Лучший ответ Сообщение было отмечено starff как решение

Решение

starff, потому, что вы получаете дату только один раз в начале скрипта, а в функции работаете с уже полученным статичным значением.
з.ы. подумайте как можно сократить код, особенно в той части где вы делаете проверку на последние цифры для подстановки правильных окончаний. Этот код можно сократить использовав проверку на остаток от деления. Представьте что вам нужны окончания слов не для часов/минут/секунд, а для чего-то другого. И этого другого может быть ну например 1000. Вы же не хотите прописывать столько условий в коде?
1
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 2
17.02.2019, 20:16  [ТС]
AlexZaw, все начало работать, записал в функцию
Цитата Сообщение от starff Посмотреть сообщение
var myTime = new Date();
. По поводу длинного кода согласен, сейчас подумаю над сокращением. Спасибо за помощь
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
17.02.2019, 22:45

Не по теме:

AlexZaw, здравствуй :)


starff, код особо не смотрел, навскидку предположу - https://codepen.io/qwerty_wasd/pen/yZGYKj
HTML5
1
<div id="data"></div>
JavaScript
1
2
3
4
(function(){
  document.getElementById(`data`).textContent = `Сегодня: ${new Intl.DateTimeFormat('ru', { weekday: `long`, year: `numeric`, month: `long`, day: `numeric`, hour: `2-digit`, minute: `2-digit`, second: `2-digit`}).format(new Date())}`;
  setTimeout(arguments.callee,1000);
})()
1
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
17.02.2019, 23:27
Qwerty_Wasd, приветствую!
Тоже сначала про использование Intl.DateTimeFormat подумал, но решил, что ТС нужно, что-бы выводились надписи "часы-минуты-секунды" Хотя, в принципе, можно совместить оба вывода

зы. зачем таким образом функцию вызывать? не проще было имя ей присвоить?
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
18.02.2019, 00:11
AlexZaw, ты про arguments.callee ? Пока вроде не deprecated )) Да и в контексте темы, не суть важно. По хорошему и ссыль на таймер бы надо(чтобы была возможность удалить). Пример куда можно копнуть предоставлен, дальше ТС либо разберется, либо зароется и придет сюда.
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
18.02.2019, 09:05
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
ты про arguments.callee
про него родимого
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Пока вроде не deprecated
Ну так то да Не думаю, что это вообще случится. Другого способа вызвать из функции саму себя, при использовании конструктора, все равно нет. Да и для поддержки старого кода этот способ нужен. Хотя с другой стороны, при "use strict", запрещено использовать arguments.callee
В общем, мы тут все как на минном поле - вроде и чисто, но червячок сомнения гложет
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
18.02.2019, 10:13
Здравствуйте, дорогие товарищи!
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <div id="data">/div> </div>
    <script>
        (function f1() {
            document.getElementById(`data`).textContent = `Сегодня: ${new Intl.DateTimeFormat('ru', { weekday: `long`, year: `numeric`, month: `long`, day: `numeric`, hour: `2-digit`, minute: `2-digit`, second: `2-digit` }).format(new Date())}`;
            setTimeout(f1, 1000);
        })();
    </script>
</body>
</html>
Цитата Сообщение от AlexZaw Посмотреть сообщение
Другого способа вызвать из функции саму себя
В какой-то из старых версий внутреннее имя функции завезли.
Цитата Сообщение от AlexZaw Посмотреть сообщение
мы тут все как на минном поле - вроде и чисто, но червячок сомнения гложет
В нативных модулях ES2015 не будет работать, естественно.

Добавлено через 1 минуту
Хотя с setInterval() всё равно лучше...
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
18.02.2019, 10:26
amr-now, приветствую!
Цитата Сообщение от amr-now Посмотреть сообщение
В какой-то из старых версий внутреннее имя функции завезли.
Можно с этого места поподробнее? Беглым поиском информации про такое не нашел, но тема заинтересовала. Был бы благодарен если бы предоставили ссылки где можно почитать подробнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2019, 10:26
Помогаю со студенческими работами здесь

Срабатывает только первый getElementById из 10 в списке
Есть следующий кусок кода для валидации формы: var val_btn = 'true'; document.getElementById('id_msg').onkeyup =...

Событие срабатывает только первый раз
Есть форма. На ней два элемента: button1 (для вызова события) label1 (для просмотра события). Вопрос Почему событие срабатывает...

CommandButton на MDIform срабатывает только первый раз
На MDIform расположено четыре command button. Нажимаю 1-ую появляется form1 (form1.show), нажимаю 2-ую появл. form2 (form2.show) и т.д. ...

Отправка POST запроса в цикле: срабатывает только первый
Прив. Есть некий сайт, задача состоит в том, чтобы залогиниться на нем, с помощью POST запроса, и после этого начать рассылку сообщения, с...

Голосование, накрутка голосов: срабатывает только первый запрос
Добрый вечер. Делаю накрутчик голосов, есть проблема. Его суть: Запускается программа, пока что просто вручную щелкую кнопку -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru