Как увеличить переменную на (x) единиц каждую секунду, а затем использовать переменную с Date (), чтобы определить, сколько единиц с первого числа месяца

0

Для простоты, скажем, мне нужно создать страницу, которая постоянно обновляется и показывает, сколько рогаток, котят и крыс рождается в секунду. Как счетчик или таймер.

Я также должен показать, сколько щенков, котят и крыс родилось с 6 утра и с начала месяца.

Я не могу понять, как определить, сколько щенков, котят и крыс родилось с 6 утра и начиная со звезды месяца, используя Date(), и эта сумма постоянно обновляется.

HTML

<section id="s01">
    <h1>if 3 puppies are born every second</h1>
    <b id="badge01" class="now">0</b> puppies have been born so far.<br>
    <b class="morning">?</b> puppies have been born since this 6 a.m. morning.<br>
    <b class="month">?</b> puppies have been born since the first of this month.
</section>

<section id="s02">
    <h1>if 5 kittens are born every second</h1>
    <b id="badge02" class="now">0</b> kittens have been born so far.<br>
    <b class="morning">?</b> kittens have been born since this 6 a.m. morning.<br>
    <b class="month">?</b> kittens have been born since the first of this month.
</section>

<section id="s03">
    <h1>if 7 rats are born every second</h1>
    <b id="badge03" class="now">0</b> rats have been born so far.<br>
    <b class="morning">?</b> rats have been born since this 6 a.m. morning.<br>
    <b class="month">?</b> rats have been born since the first of this month.
</section>

JS

var now = new Date();
var dayOfMonth = now.getDate();

setInterval(function () {
    // 3 puppies born every second
    $('#badge01').html(parseInt($('#badge01').html()) + 3);
    // 5 kittens born every second 
    $('#badge02').html(parseInt($('#badge02').html()) + 5);
    // 7 rats born every second
    $('#badge03').html(parseInt($('#badge03').html()) + 7);
}, 1);

Мой JSFiddle здесь - http://jsfiddle.net/gJy4x/6/ (Я новичок в JS, поэтому, пожалуйста, несите меня.)

Теги:

3 ответа

0
Лучший ответ

Я начну с того, что найду время сейчас, в 6 утра и первое из месяца:

var start = new Date(),
    sixAM = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 6),
    first = new Date(start.getFullYear(), start.getMonth(), 1);

то в вашем интервале цикла найдите секунды, прошедшие с тех пор:

var now = new Date(),
    secondsFromStart = (now - start)/1000,
    secondsFromSixAM = (now - sixAM)/1000,
    secondsFromFirst = (now - first)/1000;

после этого вы можете просто нажать значения в html (используя Math.floor для округления).

См. Обновленную скрипту: http://jsfiddle.net/gJy4x/7/

  • 0
    Я немного обновил вашу скрипку - спасибо! собираюсь немного покопаться в коде
  • 0
    Здорово! я думал, что секунда от SIXAM может быть отрицательной (с полуночи до 6 утра). Может быть, лучше изменить его на секунды с середины ночи с заголовком «щенки родились сегодня».
Показать ещё 2 комментария
2

Ну, во-первых, второй аргумент setInterval() - в миллисекундах. Таким образом, вы хотите, чтобы это значение было 1000, а не 1.

Предполагая 5 котят каждую секунду (мне нравятся котята!).

Сколько котят рождается с 6 утра сегодня?

// Cache date object
var now = new Date();

// Give me milliseconds!
var six = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 6);

// Time now
var timeNow = now.getTime();

// Convert milliseconds to seconds
// Since it in floating point, we'll round it.
var difference = Math.round((timeNow - six) / 1000);

// Woot, kittens!
var totalKittens = difference * 5;

Сколько котят родилось с начала месяца?

Такая же идея! Вместо использования six мы будем использовать:

var monthBegin = new Date(now.getFullYear(), now.getMonth());

Вы можете пропустить этот день. Подразумевается начало месяца. Откуда я знаю это?

В документах:

Если задано не менее двух аргументов, отсутствующие аргументы либо установлены в 1 (если дата отсутствует), либо 0 для всех остальных.

Вы должны узнать больше о объекте Date.

  • 0
    Ах, ты прав. Извините за это - я, возможно, пропустил ваше редактирование тогда. Я новичок в этом, ха-ха. Я исправлю это прямо сейчас. Спасибо!
1

Чтобы получить секунды с 6 утра сегодня:

function secsSince6am() {
  var now = new Date();
  var earlier = new Date(+now);
  earlier.setHours(6,0,0,0);
  return Math.round((now - earlier)/1000);
}

Но это будет работать только после 6 утра. Если вы хотите время с 6 утра вчера для промежутка между полуночью и 6 утра, вы можете сделать:

function secsSince6am() {
  var now = new Date();
  var earlier = new Date(+now);
  earlier.setHours(6,0,0,0);
  var diff = Math.round((now - earlier)/1000);
  return diff < 0? diff + 8.64e4 : diff;
}

Чтобы получить секунды с начала месяца:

function secsSinceStartOfMonth() {
  var now = new Date();
  var earlier = new Date(+now);
  earlier.setDate(1);
  earlier.setHours(0,0,0,0);
  return Math.round((now - earlier)/1000);
}
  • 0
    Мне нравится ваше использование round (), а также setDate ()! Мне любопытно, почему вы перешли + теперь на новый Date ()? Также - в чем причина добавления 8.64e4?
  • 0
    Когда объект Date предоставляется в качестве аргумента для new Date() , он сначала преобразуется в строку, затем строка анализируется для создания объекта даты. IE ошибается в течение лет 0 - 99, предполагая, что это двузначные годы 20-го века. Использование +now преобразует его в значение времени, которое везде используется правильно. Это может не иметь значения в этом случае, но иногда имеет значение. Добавление 8.64e4 только для периода от полуночи до 0600, чтобы вернуть секунды с 0600 предыдущего дня (если это необходимо). В противном случае используйте первую функцию и обработайте значения -ve от 0000 до 0600 другим способом. :-)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню