Как посчитать прожитые дни?
Как посчитать количество прожитых дней через библиотеку datetimepicker? Юзер вводит дату и мы считаем дни в зависимости от текущего года(учитывая еще и 366 дней - выс. год)
http://jsfiddle.net/t00a47qj/4/ |
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,
создайте переменную в которую будут заносится нужные данные и выводите куда хотите эту переменную - смотрите код выше снова |
рони, а можете объяснить 28 строку?
|
makalet,
стандартный алгоритм склонения подробнее тут http://javascript.ru/forum/misc/3516...tml#post231512 |
рони, а проще написать как-то можно исходя из вашего примера? Все таки хотелось сделать как-то через свой пример вытягивания даты и т.д. Или то плохой вариант?
|
makalet,
так в чём проблема вычесть из одной даты другую и разделить на на миллисекунды за день -- строка 25 это всё что вам нужно. |
рони,
http://jsfiddle.net/t00a47qj/6/ пишет NaN. Переменные |
makalet,
примерно вы написали следущее var test = Math.round((1000000 - 14.09.2015) / 864E5) превратите строку en с числами в Date и тогда вычитайте |
Все, сделал. А как посчитать сколько до НГ осталось( не от ДР, а от текущей даты + через сколько будет круглая дата, напр, 30 лет?
|
Кстати, мой вариант немного не так работает как ваш. Почему?
http://jsfiddle.net/t00a47qj/7/ дата установлена на 07.09.2009. Получается Дней до ДР. 2258 А в вашем примере при выборе такой же даты получается 2198. Как так получилось? |
makalet,
var mydate = new Date(en); этого недостаточно. Цитата:
до нового года нужна дата нового года 30 лет нужна дата рождения + 30 лет поинтересуйтесь Moment.js |
рони, разделитель вроде один и тот же.
http://jsfiddle.net/t00a47qj/8/ Разница в Сегодня 13.9.2015 Дата рождения 07.09.2015 А без подключения moment.js не получится? |
makalet,
.... :( http://jsfiddle.net/t00a47qj/9/ moment.js для примера было -- учебник почитайте для начала |
рони, спасибо, сделал немного иначе. Вроде работает. Помогло с date.setHours(0, 0, 0). Подскажите c НГ. Я распарсил строку, получил данные, но вот не понимаю почему получаю NaN
|
makalet,
дата нового года var date = new Date((new Date).getFullYear()+1, 0, 1, 0, 0, 0, 0 ) http://javascript.ru/forum/project/4...tml#post281738 |
рони, cпасибо большое!! Помогло.
Осталось тогда юбилей сделать( Если родился в 2005, то юбилей в 10 лет будет через n дней в 2015 году, и так далее. Это через цикл делается? |
makalet,
.setYear(2015) |
рони, а можно небольшой примерчик?
|
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,
гнать циклом пока test не станет положительным |
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,
mydate.setYear(+dd[2]+i); mydate.setYear(2005+10); mydate.setYear(2005+20); далее сами |
рони, ясно.
|
Рони, а как дописать к вашему примеру, вывод двух ближайших юбилеев.
когда рассчитывается кол-во прожитых дней, мы результат округляем к ближайшим двум тысячным юбилеям (которые будут), и выводим информацию: ближайший юбилей 14000 дней будет ... марта 2018 года следующий юбилей 15000 дней будет .... октября 2021 года |
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> |
Благодарю, Рони ))
Но чтобы эти строки расчёта: ближайший юбилей 5000 дней через 720 дней 17.05.2019 следующий юбилей 6000 дней через 1720 дней 10.02.2022 интегрировать в ваш первый скрипт в теме. Дата рождения уже введена при количестве расчёта дней (выводятся дни, как он и делает, а ниже две эти строки) |
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. |