Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2014, 15:50
Интересующийся
Отправить личное сообщение для Drugpunker Посмотреть профиль Найти все сообщения от Drugpunker
 
Регистрация: 19.03.2014
Сообщений: 23

Таймер до требуемой даты в цикле
Всем здравствуйте.
Обращаюсь к знатокам JS.
Бьюсь над проблемой уже двое суток, и с каждой секундой всё больше ненавижу себя за незнание яваскрипт.

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

Моя реализация:
  1. Кусок кода PHP(в цикле):
    выбираю данные из базы и применяю к ним функцию countdown()
$unix_date = strtotime($date_from_db);
$unix_time = strtotime($time_from_db);
		$day = date ('d', $unix_date);
		$month = date ('n', $unix_date);
		$year = date('Y', $unix_date);
		$hour = date ('H', $unix_time);
		$minute = date ('i', $unix_time);
		$second = date ('s', $unix_time);
echo "
<td>
<span id='auct_timer'>
		
</span>
		
<script language='javascript'>
countdown(".$year.",".$month.",".$day.",".$hour.",".$minute.",".$second.")
</script>
</td>
";

  1. Собственно, функция на JS:

function countdown(yr,m,d,h,mn,s)
{
  var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
  theyear = yr;
  themonth  = m;
  theday = d;
  thehour = h;
  theminute = mn;
  thesecond = s;

  var today = new Date()
  var todayy = today.getYear()
  if (todayy < 1000) todayy += 1900
  var todaym = today.getMonth()
  var todayd = today.getDate()
  var todayh = today.getHours()
  var todaymin = today.getMinutes()
  var todaysec = today.getSeconds()
  var todaystring = montharray[todaym]+" "+todayd+" "+todayy+" "+todayh+":"+todaymin+":"+todaysec
  
  futurestring = montharray[m-1]+" "+d+", "+yr+", "+h+", "+mn+", "+s
  
  dd = Date.parse(futurestring)-Date.parse(todaystring)
  dday = Math.floor(dd/(60*60*1000*24)*1)
  dhour = Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1)
  dmin = Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)
  dsec = Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)
  var tdays=" д. "
  var thours=" ч. "
  var tmin=" м. "
  var tsec=" c. "

if (dd == 0||dd < 0)
  {
    document.getElementByID('auct_timer').innerHTML = "Поехали!"
    return
  }
  else 
  {
    document.getElementById("auct_timer").innerHTML = futurestring//dday+tdays+dhour+thours+dmin+tmin+dsec+tsec
    setTimeout("countdown(theyear,themonth,theday,thehour,theminute,thesecond)",1000)
  }
}


  • Проблема состоит в том, что переданные данные из PHP, попадая в функцию JS изменяются непонятно (мне) как. Т.е., например, если передаю
    дату 20 апреля 2014 12:00:00 она сразу же превращается
    в May 18, 2014, 14, 12, 0. Чушь какая то?! (Вывод специально проверял; сам таймер закомментировал пока)
    Как тут вырулить, подскажите, кто знает. Или может пример похожий (именно похожий) где встречали?

  • Вторая проблема, при выводе в цикле PHP, данные ,т. е. таймер (после обработки функцией) почему то выводится только в первой таблице...? В последующих нет. Как быть тут?
Очень надеюсь на дельный совет...


Свою ситуацию брал из Здесь.
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2014, 16:12
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

я бы сделал по другому - на php сформировал unix_time и уже его передавал в js, а тут наверчено чрезмерно
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2014, 16:21
Интересующийся
Отправить личное сообщение для Drugpunker Посмотреть профиль Найти все сообщения от Drugpunker
 
Регистрация: 19.03.2014
Сообщений: 23

  • Имеется ввиду перевести дату+время (взятые из БД) в метку времени unix
  • Функцию JS применить к единственной переданной переменной
Если так, то - пытался уже. Не смог связать...

Последний раз редактировалось Drugpunker, 19.03.2014 в 16:39. Причина: Не дождался ответа от nice_try
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2014, 16:40
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

да, например, http://www.php.net/manual/en/function.mktime.php
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2014, 16:43
Интересующийся
Отправить личное сообщение для Drugpunker Посмотреть профиль Найти все сообщения от Drugpunker
 
Регистрация: 19.03.2014
Сообщений: 23

Сообщение от nice_try Посмотреть сообщение
да, например, http://www.php.net/manual/en/function.mktime.php
Эта функция не помогает
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2014, 16:51
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

Сообщение от Drugpunker Посмотреть сообщение
Эта функция не помогает
в умелых руках эта функция страшное оружие
Ответить с цитированием
  #7 (permalink)  
Старый 19.03.2014, 16:53
Интересующийся
Отправить личное сообщение для Drugpunker Посмотреть профиль Найти все сообщения от Drugpunker
 
Регистрация: 19.03.2014
Сообщений: 23

Может я не правильно её применял?

Каков принцип её применения в моей ситуации?
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2014, 17:09
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

$unix_date = strtotime($date_from_db);
$unix_time = strtotime($time_from_db);
        $day = date ('d', $unix_date);
        $month = date ('n', $unix_date);
        $year = date('Y', $unix_date);
        $hour = date ('H', $unix_time);
        $minute = date ('i', $unix_time);
        $second = date ('s', $unix_time);
echo "
<td>
<span id='auct_timer'>
         
</span>
         
<script language='javascript'>
countdown(".$year.",".$month.",".$day.",".$hour.",".$minute.",".$second.")
</script>
</td>
";

Код же кривой - кавычки одинакового типа друг в друга вкладываешь.
Ответить с цитированием
  #9 (permalink)  
Старый 19.03.2014, 17:15
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

Сообщение от Drugpunker Посмотреть сообщение
Может я не правильно её применял?

Каков принцип её применения в моей ситуации?
с помощью нее ты сможешь получить unix time в своей php функции и передать значение в js
Ответить с цитированием
  #10 (permalink)  
Старый 19.03.2014, 17:21
Интересующийся
Отправить личное сообщение для Drugpunker Посмотреть профиль Найти все сообщения от Drugpunker
 
Регистрация: 19.03.2014
Сообщений: 23

Сообщение от nice_try Посмотреть сообщение
с помощью нее ты сможешь получить unix time в своей php функции и передать значение в js
Это мне понятно. Непонятно как мне её использовать.
Пробовал вчера - ничего не выходит.

Ввожу, к примеру 20 апреля 2014 12:13:47.
На выходе должно быть что то вроде 56556415543534561.

И этим мне нужно оперировать так?
Как вытащить данные потом? не знаю. Не получилось...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Имеет ли смысл хранить даты в отдельной таблице? frutality Серверные языки и технологии 7 15.08.2013 19:39
Зацикленный таймер jacko Общие вопросы Javascript 2 01.07.2012 14:32
проблема с сортировкой даты rave82 jQuery 3 27.09.2011 01:35
Таймер в цикле Winkiller Общие вопросы Javascript 10 06.05.2009 21:10