[Ищу] Код считающий дни

Тема в разделе "Другие языки", создана пользователем AggreSSor, 6 окт 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. AggreSSor

    AggreSSor

    Регистр.:
    28 фев 2009
    Сообщения:
    222
    Симпатии:
    5
    Нужен код, который считал бы не только дни, но и месяца, года, часы, минуты и секунды.
    Пример: Нам уже 3 года 5 месяцев 25 дней 17 часов 58 минут 30 секунд.
    По идее это просто написать на JavaScript, но к сожалению нет знаний.
    Видел случайно такую считалку на одном сайте, но теперь того сайта нет, а код понадобился.
    Заранее благодарен
     
  2. Kub

    Kub

    Регистр.:
    5 июн 2009
    Сообщения:
    613
    Симпатии:
    477
    Показывают количество дней, часов, минут, секунд.
    dynamicdrive.com
    Немного не совсем то что вы хотели, но возможно подайдёт если не найдёте ничего лучшего.
     
  3. AggreSSor

    AggreSSor

    Регистр.:
    28 фев 2009
    Сообщения:
    222
    Симпатии:
    5
    это конечно хорошо, но немного не то, что нужно.
    надо еще месяца и года, чтобы при достижении 30 или 31 дней переводился в месяц
     
  4. web-seo

    web-seo Писатель

    Заблокирован
    Регистр.:
    4 фев 2009
    Сообщения:
    114
    Симпатии:
    55
  5. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    Вот откопал у себя в загашниках и немного причесал
    HTML:
    
    <html>
    <body>
            <script type="text/javascript">
            const startPoint = new Date("1 Jan 2010 0:00:00");
            const MINUTE = 60;
            const HOUR = 60 * MINUTE;
            const DAY = 24 * HOUR;
            const MONTH = 30 * DAY;
            const YEAR = 365 * DAY;
            function updateTimer(){
                    var field = document.getElementById("timerField");
                    var timer = (new Date() - startPoint)/1000;
                    var years = Math.floor(timer/YEAR);
                    var months = Math.floor((timer - years * YEAR)/MONTH);
                    var days = Math.floor((timer - years * YEAR - months * MONTH )/DAY);
                    var hours = Math.floor((timer - years * YEAR - months * MONTH - days * DAY)/HOUR);
                    var minutes = Math.floor((timer - years * YEAR - months * MONTH - days * DAY - hours * HOUR)/MINUTE);
                    var seconds = Math.floor(timer - years * YEAR - months * MONTH - days * DAY - hours * HOUR - minutes * MINUTE);
                    field.innerHTML = 'Нам ' + years + ' лет ' + months + ' месяцев ' + days + ' дней ' + 
                            hours + ' часов ' + minutes + ' минут ' + seconds + ' секунд;)';
            }
            setInterval(updateTimer,1000)
            </script>
            <span id="timerField"></span>
    </body>
    </html>
    
     
  6. AggreSSor

    AggreSSor

    Регистр.:
    28 фев 2009
    Сообщения:
    222
    Симпатии:
    5
    Пробовал.
    Но скрипт не работает
     
  7. Kub

    Kub

    Регистр.:
    5 июн 2009
    Сообщения:
    613
    Симпатии:
    477
    У меня в IE не работает, во всех остальных браузерах работает.
     
  8. AggreSSor

    AggreSSor

    Регистр.:
    28 фев 2009
    Сообщения:
    222
    Симпатии:
    5
    В общем после 2х часов гуляния по гуглу вроде нашел то что нужно.
    HTML:
    
    <form name="dates">
       <strong>Прошло с момента рождения:</strong><br>
       <input type="text" size="67" name="passed"></strong><br>
       <strong>Осталось до ближайшего дня рождения:</strong><br>
       <input type="text" size="67" name="topass"></strong>
    </form>
    
    <SCRIPT LANGUGE="JavaScript">
    <!--
    
    function IsLeapYear (Year) {
      return ((Year % 4) == 0) && (((Year % 100) != 0) || ((Year % 400) == 0))
    }
    
    function DaysPerMonth (Year, Month) {
       DaysInMonth = new Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    
       if (Month == -1) Month = 11
    
       days=DaysInMonth [Month]
       if ((Month == 1) && IsLeapYear(Year)) {days++}
       return days
    }
    
    function DiffDateTime (DTa, DTb) {
       maxValues = new Array (0, 12, 0, 24, 60, 60)
    
       for (i=5; i>=0; i--) {
         if (DTa[i]<DTb[i] && i>0) {
            DTa[i-1]--
            DTa[i] += maxValues[i] - DTb[i]
            if (i==2) DTa[i] += DaysPerMonth (DTa[0], DTa[1])
         } else {
           DTa[i] -= DTb[i]
         }
       }
    
       return DTa
    }
    
    function TimeToString (value, str1, str2, str5) { 
       if (!value) return 0
       mod = value % 10
       if ((value%100)>=10 && (value%100)<=19) return str5
       if (mod == 1) return str1
       if (mod >= 2 && mod <= 4) return str2
       return str5
    }  
    
    function DaysLeftText (Year, Month, Day, Hour, Minute, Second) {
    
       tYear   = TimeToString (Year, 'год', 'года', 'лет')
       tMonth  = TimeToString (Month, 'месяц', 'месяца', 'месяцев')
       tDay    = TimeToString (Day, 'день', 'дня', 'дней')
       tHour   = TimeToString (Hour, 'час', 'часа', 'часов')
       tMinute = TimeToString (Minute, 'минута', 'минуты', 'минут')
       tSecond = TimeToString (Second, 'секунда', 'секунды', 'секунд')
    
       preValues = new Array (Year, Month, Day, Hour, Minute, Second)
       preTexts = new Array (tYear, tMonth, tDay, tHour, tMinute, tSecond)
    
       numPartsPresent=0
       for (i=5; i>=0; i--) if (preValues[i]!=0) numPartsPresent++
    
       text=''
       for (i=5; i>=0; i--) {
          if (preValues[i]!=0) {
             text=preValues[i]+' '+preTexts[i]+' '+text
             if (numPartsPresent>1) {
                text='и '+text
                numPartsPresent=0
             } 
          }
       }
    
       return text
    }
    
    function OnTimer () {
       Now = new Date()
       nowYear=Now.getYear ()
       if (nowYear<200) nowYear=nowYear+1900
    
       // Time passed since my birth
       DTa = new Array (nowYear, Now.getMonth (), Now.getDate (), Now.getHours (), Now.getMinutes (), Now.getSeconds ())
       DTb = new Array (1978, 6, 17, 12, 0, 0)
       DTc = DiffDateTime (DTa, DTb)
    
       // Time to my nearest birtday
       nextBDY=nowYear
       if ((Now.getMonth ()>6) || (Now.getMonth()==6 && (Now.getDay()>17 || (Now.getDay()=17 && Now.getHours()>12)))) nextBDY++
       DTa = new Array (nowYear, Now.getMonth (), Now.getDate (), Now.getHours (), Now.getMinutes (), Now.getSeconds ())
       DTb = new Array (nextBDY, 6, 17, 12, 0, 0)
       DTd = DiffDateTime (DTb, DTa)
    
       document.dates.passed.value=DaysLeftText (DTc[0],DTc[1],DTc[2],DTc[3],DTc[4],DTc[5]);
       document.dates.topass.value=DaysLeftText (DTd[0],DTd[1],DTd[2],DTd[3],DTd[4],DTd[5]);
    }
    
    setInterval("OnTimer()",500);
    
    -->
    </script>
    
    только вот маленько нужно его подпилить, чтобы не показывалось это дело в форме и каким-то образом разделить счётчик и таймер
     
  9. web-seo

    web-seo Писатель

    Заблокирован
    Регистр.:
    4 фев 2009
    Сообщения:
    114
    Симпатии:
    55
  10. AggreSSor

    AggreSSor

    Регистр.:
    28 фев 2009
    Сообщения:
    222
    Симпатии:
    5
    причитайте внимательнее мой запрос. мне не нужны только дни и мне не нужны только года, месяца и дни.
    Мне нужно вплоть до часов, минут и секунд, кроме недель

    Но всё равно спасибо
     
Статус темы:
Закрыта.