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

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

17.02.2019, 18:57. Показов 1674. Ответов 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
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
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
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
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
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
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
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
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 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru