Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как посчитать прожитые дни? (https://javascript.ru/forum/misc/58279-kak-poschitat-prozhitye-dni.html)

makalet 13.09.2015 14:56

Как посчитать прожитые дни?
 
Как посчитать количество прожитых дней через библиотеку datetimepicker? Юзер вводит дату и мы считаем дни в зависимости от текущего года(учитывая еще и 366 дней - выс. год)
http://jsfiddle.net/t00a47qj/4/

рони 13.09.2015 16:35

datetimepicker сколько дней прошло или осталось до даты
 
makalet,
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> - jsFiddle demo</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.4/jquery.datetimepicker.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.4/build/jquery.datetimepicker.full.js"></script>
  <script>
$(window).load(function() {
    var text = "";
    $("#datetimepicker").datetimepicker({
        timepicker: false,
        lang: "ru",
        format: "d.m.Y",
        dayOfWeekStart : 1,
        onClose: function(c, f) {
            c = (new Date(c)).setHours(0, 0, 0);
            var a = new Date;
            a.setHours(0, 0, 0);
            var d = a.getDate(),
                e = a.getMonth() + 1,
                g = a.getFullYear(),
                d = d + "." + e + "." + g,
                a = Math.round((a - c) / 864E5),
                e = function(a) {
                    return function(b) {
                        return a[1 == b % 10 && 11 != b % 100 ? 0 : 2 <= b % 10 && 4 >= b % 10 && (10 > b % 100 || 20 <= b % 100) ? 1 : 2]
                    }
                },
                a = (0 == a ? "Сегодня " : 0 < a ? "Прошло " : (a *= -1,
                    "Осталось ")) + a + " " + e(["день", "дня", "дней"])(a);
            text = "Дата рождения: " + f.val() + "<br>Сегодня: " + d + "<br>" + a
        }
    })
    $('#enter').click(function() {$(".info").html(text)})
});
</script>

</head>
<body>
      <label for="datetimepicker">Введите дату рождения</label><br>
      <input id="datetimepicker" type="text" id="date" /><br>
      <input type="button" id="enter" value="Посчитать" /><br>
      <span class='info'></span>

</body>

</html>

makalet 13.09.2015 17:03

рони, а как сделать это при клике на кнопку по моему примеру?

рони 13.09.2015 17:12

makalet,
создайте переменную в которую будут заносится нужные данные и выводите куда хотите эту переменную - смотрите код выше снова

makalet 13.09.2015 17:50

рони, а можете объяснить 28 строку?

рони 13.09.2015 18:01

makalet,
стандартный алгоритм склонения
подробнее тут http://javascript.ru/forum/misc/3516...tml#post231512

makalet 13.09.2015 18:05

рони, а проще написать как-то можно исходя из вашего примера? Все таки хотелось сделать как-то через свой пример вытягивания даты и т.д. Или то плохой вариант?

рони 13.09.2015 18:12

makalet,
так в чём проблема вычесть из одной даты другую и разделить на на миллисекунды за день -- строка 25 это всё что вам нужно.

makalet 13.09.2015 18:19

рони,
http://jsfiddle.net/t00a47qj/6/ пишет NaN. Переменные

рони 13.09.2015 18:24

makalet,
примерно вы написали следущее
var test = Math.round((1000000 - 14.09.2015) / 864E5)
превратите строку en с числами в Date и тогда вычитайте

makalet 13.09.2015 18:24

Все, сделал. А как посчитать сколько до НГ осталось( не от ДР, а от текущей даты + через сколько будет круглая дата, напр, 30 лет?

makalet 13.09.2015 18:31

Кстати, мой вариант немного не так работает как ваш. Почему?
http://jsfiddle.net/t00a47qj/7/
дата установлена на 07.09.2009. Получается Дней до ДР. 2258
А в вашем примере при выборе такой же даты получается 2198.
Как так получилось?

рони 13.09.2015 18:51

makalet,
var mydate = new Date(en); этого недостаточно.
Цитата:

•Для краткого формата даты допускается использование разделителей "/" или "-", но порядок элементов должен быть строго "месяц/день/год", например "7/20/96".
http://javascript.ru/Date.parse
до нового года нужна дата нового года

30 лет нужна дата рождения + 30 лет
поинтересуйтесь Moment.js

makalet 13.09.2015 19:06

рони, разделитель вроде один и тот же.
http://jsfiddle.net/t00a47qj/8/
Разница в Сегодня 13.9.2015 Дата рождения 07.09.2015
А без подключения moment.js не получится?

рони 13.09.2015 19:26

makalet,
.... :(
http://jsfiddle.net/t00a47qj/9/
moment.js для примера было -- учебник почитайте для начала

makalet 13.09.2015 20:05

рони, спасибо, сделал немного иначе. Вроде работает. Помогло с date.setHours(0, 0, 0). Подскажите c НГ. Я распарсил строку, получил данные, но вот не понимаю почему получаю NaN

рони 13.09.2015 20:14

makalet,
дата нового года
var date = new Date((new Date).getFullYear()+1, 0, 1, 0, 0, 0, 0 )

http://javascript.ru/forum/project/4...tml#post281738

makalet 13.09.2015 20:45

рони, cпасибо большое!! Помогло.
Осталось тогда юбилей сделать( Если родился в 2005, то юбилей в 10 лет будет через n дней в 2015 году, и так далее. Это через цикл делается?

рони 13.09.2015 20:55

makalet,
.setYear(2015)

makalet 13.09.2015 21:14

рони, а можно небольшой примерчик?

рони 13.09.2015 21:48

makalet,
<script>
  var birthday = '07.09.2005';
  var dd = birthday.split(".");
  var mydate = new Date(+dd[2]+10,dd[1]-1,dd[0]);
  var date = new Date();
  date.setHours(0, 0, 0);
  var test = Math.round((mydate - date) / 864E5)
  document.write("юбилей через " +test + " дней<br>")
</script>
<script>
  var birthday = '07.09.2005';
  var dd = birthday.split(".");
  var mydate = new Date(dd[2],dd[1]-1,dd[0]);
  mydate.setYear(+dd[2]+10);
  var date = new Date();
  date.setHours(0, 0, 0);
  var test = Math.round((mydate - date) / 864E5)
  document.write("юбилей через " +test + " дней<br>")
</script>

makalet 13.09.2015 21:55

рони, а чтобы определить сколько именно лет исполняется?

рони 13.09.2015 22:03

makalet,
гнать циклом пока test не станет положительным

рони 13.09.2015 22:10

makalet,
<script>
  var birthday = '07.09.2005';
  var dd = birthday.split(".");
  var mydate = new Date(dd[2],dd[1]-1,dd[0]);
  var date = new Date();
  date.setHours(0, 0, 0);
  for (var i=0; ; i+=10)  {
  mydate.setYear(+dd[2]+i);
  var test = Math.round((mydate - date) / 864E5);
  if(test > 0) {document.write(i +" лет юбилей через " +test + " дней<br>"); break }
  }

</script>

makalet 13.09.2015 22:21

спасибо

рони 13.09.2015 22:37

makalet,
mydate.setYear(+dd[2]+i);
mydate.setYear(2005+10);
mydate.setYear(2005+20);
далее сами

makalet 13.09.2015 23:09

рони, ясно.

mrt19 27.05.2017 16:40

Рони, а как дописать к вашему примеру, вывод двух ближайших юбилеев.
когда рассчитывается кол-во прожитых дней, мы результат округляем к ближайшим двум тысячным юбилеям (которые будут), и выводим информацию:
ближайший юбилей 14000 дней будет ... марта 2018 года
следующий юбилей 15000 дней будет .... октября 2021 года

рони 27.05.2017 17:02

mrt19,
<script>
  var birthday = '07.09.2005';
  var dd = birthday.split(".");
  var mydate = new Date(dd[2],dd[1]-1,dd[0]);
  var date = new Date();
  date.setHours(0, 0, 0);
  for (var i=0; ; i+=1000)  {
  mydate = new Date(dd[2],dd[1]-1,+dd[0]+i);
  var test = Math.round((mydate - date) / 864E5); document.write(mydate.toLocaleDateString()+" "+i+"<br>");
  if(test > 0) {document.write("ближайший юбилей "+ i +" дней через " +test + " дней " + mydate.toLocaleDateString()+"<br>"); break }
  }
  i+=1000;
  mydate = new Date(dd[2],dd[1]-1,+dd[0]+i);
  test = Math.round((mydate - date) / 864E5);
  document.write("следующий юбилей "+ i +" дней через " +test + " дней " + mydate.toLocaleDateString());
</script>

mrt19 27.05.2017 17:21

Благодарю, Рони ))

Но чтобы эти строки расчёта:

ближайший юбилей 5000 дней через 720 дней 17.05.2019
следующий юбилей 6000 дней через 1720 дней 10.02.2022

интегрировать в ваш первый скрипт в теме.
Дата рождения уже введена при количестве расчёта дней (выводятся дни, как он и делает, а ниже две эти строки)

рони 27.05.2017 22:47

datetimepicker юбилей
 
mrt19,
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>datetimepicker demo</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.4/jquery.datetimepicker.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.4/build/jquery.datetimepicker.full.js"></script>

  <script>
$(window).load(function() {
    var text = "";
    jQuery.datetimepicker.setLocale('ru');
    $("#datetimepicker").datetimepicker({
        timepicker: false,
        format: "d.m.Y",
        dayOfWeekStart: 1,
        maxDate: 0,
        onClose: function(c, f) {
            c = (new Date(c)).setHours(0, 0, 0);
            var a = new Date;
            a.setHours(0, 0, 0);
            var d = a.getDate(),
                e = a.getMonth() + 1,
                g = a.getFullYear(),
                d = d + "." + e + "." + g,
                k = Math.round((a - c) / 864E5),
                e = function(a) {
                    return function(b) {
                        return a[1 == b % 10 && 11 != b % 100 ? 0 : 2 <= b % 10 && 4 >= b % 10 && (10 > b % 100 || 20 <= b % 100) ? 1 : 2]
                    }
                },
                k = (0 == k ? "Сегодня " : 0 < a ? "Прошло " : (k *= -1,
                    "Осталось ")) + k + " " + e(["день", "дня", "дней"])(k);
            text = "Дата рождения: " + f.val() + "<br>Сегодня: " + d + "<br>" + k + "<br>";

            for (var i = 0;; i += 1000) {
                k = Math.round((c - a) / 864E5);
                if (k > 0) {
                    text += "ближайший юбилей " + i + " дней через " + k + " " + e(["день", "дня", "дней"])(k) + " " + (new Date(c)).toLocaleDateString() + "<br>";
                    break
                }
                c += 24 * 60 * 60 * 1000 * 1000;
            }
            i += 1000;
            c += 24 * 60 * 60 * 1000 * 1000;
            k = Math.round((c - a) / 864E5);
            text += "следующий юбилей " + i + " дней через " + k + " " + e(["день", "дня", "дней"])(k) + " " + (new Date(c)).toLocaleDateString();

        }
    })
    $('#enter').click(function() {
        $(".info").html(text)
    })
});
</script>

</head>
<body>
      <label for="datetimepicker">Введите дату рождения</label><br>
      <input id="datetimepicker" type="text" id="date" /><br>
      <input type="button" id="enter" value="Посчитать" /><br>
      <span class='info'></span>

</body>

</html>


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