Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   разница между датами в месяцах (https://javascript.ru/forum/dom-window/51857-raznica-mezhdu-datami-v-mesyacakh.html)

mailmoney 22.11.2014 14:07

разница между датами в месяцах
 
Здравствуйте. Такую разницу - в днях я умею.
Но как точно определить, как на ПХП, сколько прошло месяцев (у меня речь идет про дни рождения) так что тут нужно точно знать, был 30 дней в месяце или 31.. и т.д. Есть ли такое на javascript

var date1=selectedDate.split('.') 
//Текущая дата
var todayDate = new Date();
//Выбранная дата
var currentDate = new Date(date1[2],(date1[1]-1),date1[0]);
//Разница во времени
var dateDifference = todayDate.getTime()-currentDate.getTime();

//Дата, созданная из остатка времени
var remainsDate = new Date(dateDifference);

var remainsSec = (parseInt(remainsDate / 1000));
var remainsFullDays = (parseInt(remainsSec / (24 * 60 * 60)));
var secInLastDay = remainsSec - remainsFullDays * 24 * 3600;
var remainsFullHours = (parseInt(secInLastDay / 3600));
var secInLastHour = secInLastDay - remainsFullHours * 3600;
var remainsMinutes = (parseInt(secInLastHour / 60));
var lastSec = secInLastHour - remainsMinutes * 60;


alert (remainsFullDays);

рони 22.11.2014 14:25

mailmoney,
http://javascript.ru/forum/misc/1280...html#post78145

mailmoney 22.11.2014 14:29

неверно работает, хоть:

var d = 23;
var m = 11;
var y = 1987;


хоть

var d = 21;
var m = 11;
var y = 1987;


пишет 27 возраст (сегодня 22.11)

mailmoney 22.11.2014 14:29

и мне нужно именно кол-во месяцев. т.е. детский возраст считаю, нужно в месяцах
и не хочется аякс запрос в php делать в этом месте. было бы удобно если прямо на js или jquery

рони 22.11.2014 14:33

mailmoney,
вы точно по ссылке смотрите ?

рони 22.11.2014 14:38

mailmoney,
function passed(b, c, a) {
     var d = new Date(a, c - 1, b, 0, 0, 0, 0),
         e = new Date;
     e.setHours(0, 0, 0, 0);
     for (c = 0;; c++) {
         a = new Date(d.getFullYear(), d.getMonth() + 2, 0);
         a.getDate() > b && a.setDate(b);
         if (a > e) break;
         d = a
     }
     b = Math.round((e - d) / 864E5);
     a = Math.floor(c / 12);
     return [a, c % 12, b]
 };

var d = 23;
var m = 11;
var y = 1987;
alert(passed(d, m, y));  //26 лет 11 месяцев 30 дней

var d = 21;
var m = 11;
var y = 1987;
alert(passed(d, m, y));  //27 лет 0 месяцев 1 день

mailmoney 22.11.2014 14:46

да вроде нормально считает. не знаю как с феврелем, нет особо времени проверять, надеюсь что нормально. кому нужно кол-во месяцев, код особо не изменился:

function passed(b, c, a) {
     var d = new Date(a, c - 1, b, 0, 0, 0, 0),
         e = new Date;
     e.setHours(0, 0, 0, 0);
     for (c = 0;; c++) {
         a = new Date(d.getFullYear(), d.getMonth() + 2, 0);
         a.getDate() > b && a.setDate(b);
         if (a > e) break;
         d = a
     }
     b = Math.round((e - d) / 864E5);
     a = Math.floor(c / 12);
     return [a*12+c % 12]
 };



спасибо!


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