Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обратный отсчет от даты (https://javascript.ru/forum/dom-window/57630-obratnyjj-otschet-ot-daty.html)

magnatan 12.08.2015 16:10

Обратный отсчет от даты
 
Здравствуйте! помогите пожалуйста, мне нужно чтоб счетчик отсчитывал указанное католичество дней, от даты указанной!

То есть, дата 01.01.2015 мне нужно чтоб он отсчитал к примеру 30 дней и остановился! каждый день типа осталось 29 дней, на следующий день 28 дней, итд. при перегрузке страницы не менял свои значения!
Формат даты чтоб был 01.(Число) 01.(Месяц) 2015.(год)
На странице будет несколько таких счетчиков, нужно чтоб он именно от даты указанной плясал. а не по id счетчика... Огромное спасибо..

Есть какйто счетчик но не подходит считаем вперед и формат даты не тот(((
<SCRIPT language=JavaScript>

	d0 = new Date('August 01, 2015'); // дата запуска сайта (месяц должен быть на английском!)

	d1 = new Date();

	dt = (d1.getTime() - d0.getTime()) / (1000*60*60*24);

	document.write(' ' + Math.round(dt) + '-й день'); // счетчик дней
</SCRIPT>

magnatan 12.08.2015 17:34

Что не кто не знает?
Или может не поняли?

Все скрипты ведут отсчет до даты! а мне нужно чтоб ОТ даты отсчитал 30 дней и стал, формат даты 01.01.2015

magnatan 12.08.2015 17:38

Ярче пример!

Мужик арендует резиновую бабу!

мол Арендовано 01.01.2015 до конца аренды осталось 30 дней, на следующий 29 дней, итд.
Скрипт сайта ест формат даты 01.01.2015. и не до какой то даты! а 30 дней ОТ даты аренды бабы...

magnatan 12.08.2015 18:10

Вот вроди такого, как формат даты сделать 01.01.2015 ? через точку?
<script  type="text/javascript">
var data = "12/13/2016"// "месяц/день/год" начало отсчёта
document.write(10-1*Math.floor((new Date()-new Date(data))/(24*60*60*1000)))
</script>

Lemme 13.08.2015 01:37

12.13.2016 в таком виде приходит дата?? Если да, то что мешает отредактировать ее?

var data = "12.13.2016".replace(/\./g, '/');
alert(data);

Deff 13.08.2015 03:23

Цитата:

Сообщение от magnatan
а мне нужно чтоб ОТ даты отсчитал 30 дней и стал, формат даты 01.01.2015

Завтра гляну

magnatan 13.08.2015 10:44

Цитата:

Сообщение от Lemme (Сообщение 384001)
12.13.2016 в таком виде приходит дата?? Если да, то что мешает отредактировать ее?

var data = "12.13.2016".replace(/\./g, '/');
alert(data);

------------------------------------------------------
alert(data);
Это убрал потому как какое то уведомление постоянно появляется оно мне не нужно!
-----------------------------------------------------
<script  type="text/javascript">
var data = "13.08.2015".replace(/\./g, '/');// "месяц/день/год" начало отсчёта
document.write(30-1*Math.floor((new Date()-new Date(data))/(24*60*60*1000)))
</script>


В таком ? сегодняшняя дата, должно показывать 30 дней осталось, а показывает 178

Дата приходит в формате ДЕНЬ.МЕСЯЦ.ГОД нужно именно так! и еще приходит и время, как с ним быть? мне оно не нужно! но формат приходит такой 13.08.2015 12:40 вот как мне это все слепить?

Lemme 13.08.2015 13:07

function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        // создаем дату в формате (год, месяц, день).setHours(часы, минуты)
        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        return Math.round((start - end) / 86400000);
    }

    alert(dateDiff('13.08.2015 13:00', 30));


p.s я лишь учусь, не гоните на меня особо=) бу..

magnatan 13.08.2015 13:13

Цитата:

Сообщение от Lemme (Сообщение 384068)
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        return Math.round((start - end) / 86400000);
    }

    alert(dateDiff('13.08.2015 13:00', 30));


А как менять с 30 суток ? на 540 дней нужно!!!

и вот так ?
Не работает! не показывает ничего вообще
<script  type="text/javascript">
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        console.log(Math.round((start - end) / 86400000));
    }

    dateDiff('13.08.2015 13:00', 540);

</script>

Lemme 13.08.2015 13:17

magnatan,

// Особое внимание - уделите этой строке
dateDiff('13.08.2015 13:00', 540)

p.s разберетесь, ок, не разберетесь ..... (ибо лентяям помогать не хочется).
помните, вы сюда пришли за помощью, а не "требовать", вам никто ничем не обязан.

magnatan 13.08.2015 13:22

Цитата:

Сообщение от Lemme (Сообщение 384070)
magnatan,

Да причем линьтяй? я не понимаю в яве вообще, пришел за помощью!

<script  type="text/javascript">
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        return Math.round((start - end) / 86400000);
    }

    alert(dateDiff('13.08.2015 13:00', 30));

</script>


Так какое то уведомление выскакивает в браузере, но на странице ничего не отображается (((

Lemme 13.08.2015 13:24

magnatan, если вы пришли за "помощью", то просите помощи, а не готовых решний.

p.s уведомление в браузере - это и есть остаток дней.
https://learn.javascript.ru/uibasic

magnatan 13.08.2015 13:26

Цитата:

Сообщение от Lemme (Сообщение 384072)
magnatan, если вы пришли за "помощью", то просите помощи, а не готовых решний.

p.s уведомление в браузере - это и есть остаток дней.

А можно просто чтоб текстом? потому как будет несколько кодов на одной странице! пожалуйста! спасибо

Lemme 13.08.2015 13:29

magnatan, гуглите

// это нужно выводить.
dateDiff('13.08.2015 13:00', 30);


ибо так вы не научитесь, а если и не хотите научится, то лучше на фриланс идите, там вам все сделают.

magnatan 13.08.2015 13:31

Цитата:

Сообщение от Lemme (Сообщение 384074)
magnatan, гуглите

// это нужно выводить.
dateDiff('13.08.2015 13:00', 30);


ибо так вы не научитесь, а если и не хотите научится, то лучше на фриланс идите, там вам все сделают.

Методом тыка подобрал, вот так мне нужно было!

<script  type="text/javascript">
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        return Math.round((start - end) / 86400000);
    }

    document.write (dateDiff('13.08.2015 13:00', 540));

</script>


СПАСИБО!!! ВАМ ОГРОМНОЕ!!!

magnatan 13.08.2015 13:33

Цитата:

Сообщение от magnatan (Сообщение 384075)
Методом тыка подобрал, вот так мне нужно было!

<script  type="text/javascript">
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now();

        return Math.round((start - end) / 86400000);
    }

    document.write (dateDiff('13.08.2015 13:00', 540));

</script>


СПАСИБО!!! ВАМ ОГРОМНОЕ!!!

ахахахааа только оно вперед дни счетает, а надо чтоб минусовало дни! обратно отсчитывало ))))))


АНЕ ВСЕ НОРМ! СПАСИБО ТО Я ОШИБСЯ

Lemme 13.08.2015 15:58

Делать было нечего, мб понадобится =)

/**
 * @param  {[string]} fromDate  [Дата, от которой нужно начинать отсчет дней. Образец - 13.08.2015 13:00]
 * @param  {[number]} daysToEnd [Кол-во дней]
 * @return {[object]}           [годы, месяцы, дни, часы, минуты, секунды]
 */
function dateDiff(fromDate, daysToEnd) {
        // [dd, mm, yyyy, hh, mm]
        fromDate = fromDate.replace(/[\.\s\:]/g, '/').split('/');
        
        // 86400000 - сутки
        var daysToEnd = daysToEnd * 86400000;

        // start = new Date(год, месяц, день).setHours(часы, минуты)
        var start   = new Date(fromDate[2], fromDate[1] - 1, fromDate[0]).setHours(fromDate[3], fromDate[4]) + daysToEnd,
            end     = Date.now(),
            diff    = (start - end) / 86400000;

        var years   = diff / 365,
            months  = (years - Math.floor(years)) * 12,
            days    = (months - Math.floor(months)) * 30,
            hours   = (days - Math.floor(days)) * 24,
            minutes = (hours - Math.floor(hours)) * 60,
            seconds = (minutes - Math.floor(minutes)) * 60;

        return {
            years:      Math.floor(years),
            months:     Math.floor(months),
            days:       Math.floor(days),
            hours:      Math.floor(hours),
            minutes:    Math.floor(minutes),
            seconds:    Math.floor(seconds)
        };
    }

    /**
     * ВОТ ТАК ВОТ ИСПОЛЬЗОВАТЬ
     */

    var myDataDiff = dateDiff('13.08.2015 13:00', 540);

    // сколько осталось лет
    myDataDiff.years;
    // сколько осталось месяцев
    myDataDiff.months; 
    // сколько осталось дней
    myDataDiff.days;
    // сколько осталось часов
    myDataDiff.hours;
    // сколько осталось минут
    myDataDiff.minutes;
    // сколько осталось секунд
    myDataDiff.seconds;


    /**
     * Это лишь пример, на него даже не смотрите (строка ниже)
     */
    alert(JSON.stringify(myDataDiff).replace(/[\{\}\"]/g, '').replace(/\,/g, '\r\n'));

Deff 13.08.2015 16:06

Вариант:

//Установка:
<script type="text/javascript">
//Установка счетчиков:
function addСount(str,del) {
  var stor = window.localStorage;
  var Tday = 1000*60*60*24; //День в ms;
  str=str.split(',');
  if(str.length!=4) return false; var arr;
  if((arr=str[2].split('.')).length!=3) return false;
  str = str[0]+','+str[1]+','+ str[2]+','+(+new Date(arr[2],arr[1]-1,arr[0])+str[3]*Tday);
  var bound = ';\n'; //Разделитель записей;
  var strg = stor["coutArray"];//strg=''
  if(!!strg)strg = strg.replace(str+bound,'');
  if(del){ stor["coutArray"] = strg; return [true, "Запись удалена"];}
  if(!strg){strg='';stor["coutArray"]='';}
  stor["coutArray"]= strg + str+ bound;
  return stor["coutArray"];
};
//Формат данных:
//Имя, уточняющая запись, Дата отсчета, Дельта T(дней)//
var newCount = "Васе,до конца соместной жизни,08.08.2015,30";
addСount(newCount);
var newCount = "Диме,до завершения погашения ипотеки,02.08.2015,25";
addСount(newCount);
var newCount = "Коле,до конца аренды резиновой бабы,17.08.2015,18";
alert(addСount(newCount))
</script>



//Вывод результов:
<div id="out-count-write"></div>
<script type="text/javascript">
//Вывод результов счетчиков:
function writeStorCount() {
  var last_Phrase = " - Ваше время Истекло!"
  var stor = window.localStorage,Tday = 1000*60*60*24,bound = ';\n';
  var strg = stor["coutArray"],arrCount,i;
  if(!strg) return false;
  arrCount = strg.split(bound);
  var lng = arrCount.length - 1;
  for(i=0; i<lng; i++){
    var arr = arrCount[i].split(',');//alert(arr)
    var delta = parseInt((+arr[3]-(+new Date()))/Tday);
    if(delta<0) return false;
    var test = delta%10;
    var day='дней'; if(test==1)day='дeнь';if(test>1&&test<5)day='дня';
    if(delta>10&&delta<21)day='дней';
    var str = arr[0]+' '+arr[1]+ ' осталось '+ delta +' '+ day + '<br>';
    if(delta==0)str = arr[0] + last_Phrase + '<br>';
    document.getElementById('out-count-write').innerHTML+=str;
  }
};
writeStorCount()
</script>


Часовой пояс GMT +3, время: 07:48.