Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Расчет возраста (https://javascript.ru/forum/misc/12805-raschet-vozrasta.html)

Tryman 03.11.2010 20:04

Расчет возраста
 
Добрый вечер, такая проблема, произвожу расчет возраста посетителя следующим скриптом:

<SCRIPT Language="JavaScript">
<!-- hide from old browsers
var today = new Date()
if ([xfvalue_data] && [xfvalue_mec] && [xfvalue_god] != "") {
var targetDate = new Date("[xfvalue_data]/[xfvalue_mec]/[xfvalue_god]")
var timeAfterTarget = Math.floor(( today.getTime() - targetDate.getTime() ) / 86400000)
var msg = parseInt(timeAfterTarget/365);
document.write(msg);
} else {
var msg="";
document.write(msg);
}
//-->
</SCRIPT>


[xfvalue_data] && [xfvalue_mec] && [xfvalue_god] это переменные, из выпадающего списка юзер выбирает необходимые значения....вбиваю свои данные 24/8/1990 на сайте скрипт выводит результат расчета 18 лет.....на могу найти причину почему на 2 года ошибается....
Прошу помощи, заранее спасибо!

ksa 03.11.2010 21:58

Tryman, как вариант:
- переводи даты в числа формата ГГГГММДД
- просто вычисляй их разность
- дели на 10000
- отбрасывай дробную часть

Aetae 03.11.2010 22:16

xfvalue_god=1990;
alert(new Date().getFullYear()-xfvalue_god)

Надмозги, лол.) :lol:

ksa 03.11.2010 22:58

Aetae, пример:

сегодня 03.11.2010
родился 10.09.2009

по-твоему человеку 1 год. Что не верно...:nono:

Aetae 04.11.2010 01:10

Цитата:

Сообщение от ksa (Сообщение 77319)
Aetae, пример:

сегодня 03.11.2010
родился 10.09.2009

по-твоему человеку 1 год. Что не верно...:nono:

Не, тут как раз таки верно)
Но да, признаю, ступил.)

рони 04.11.2010 01:12

Tryman,
Поменяйте месяц и дату местами тут
var targetDate = new Date("[xfvalue_data]/[xfvalue_mec]/[xfvalue_god]")

Aetae 04.11.2010 02:18

Не, всё равно не точно будет ибо не в каждом году 365 дней.

В голову теперь только всякие надмозги и лезут.=\
d=24;m=7;y=1990; // и надо помнить, что месяца считаются 0-11, а не 1-12)
var t=new Date();t=[t.getMonth(),t.getDate(),t.getFullYear()];
alert(t[2]-y-(t[0]==m?t[1]<d:t[0]<m))

Или ещё более извращённый:
d=24;m=7;y=1990; // и надо помнить, что месяца считаются 0-11, а не 1-12)
var t=new Date();
alert( t.getFullYear()-y-((t.getMonth()-m||t.getDate()-d)<0) )

ksa 04.11.2010 08:29

Цитата:

Сообщение от Aetae
всё равно не точно будет

Мой вариант проверен годами. :) Используя его людям начисляют пособие... Оформляют пенсии...
Т.ч. отбрось сомнения и просто используй.

Aetae 04.11.2010 11:29

Цитата:

Сообщение от ksa (Сообщение 77345)
Мой вариант проверен годами. :) Используя его людям начисляют пособие... Оформляют пенсии...
Т.ч. отбрось сомнения и просто используй.

Цитата:

Сообщение от ksa (Сообщение 77309)
Tryman, как вариант:
- переводи даты в числа формата ГГГГММДД
- просто вычисляй их разность
- дели на 10000
- отбрасывай дробную часть

Это логично и это первое о чём я подумал, но "просто изпользовать" не получится ибо кода нет)) И в js реализация будет громоздкой, ибо Date такой Date.

DooMer 05.11.2010 19:05

рони,
Без обид, но выкинь свой говнокод
за 10 мин наваял

var day = 24;
var month = 8;
var year = 1990;
var now = new Date().getTime();
var birsday = Date.UTC(year,month-1,day);
var result = new Date();	
result.setTime(now-birsday);
alert(result.getFullYear() - 1970)
alert(result.getMonth())
alert(result.getDay())


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