Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2010, 20:04
Новичок на форуме
Отправить личное сообщение для Tryman Посмотреть профиль Найти все сообщения от Tryman
 
Регистрация: 03.11.2010
Сообщений: 1

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

<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 года ошибается....
Прошу помощи, заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2010, 21:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Tryman, как вариант:
- переводи даты в числа формата ГГГГММДД
- просто вычисляй их разность
- дели на 10000
- отбрасывай дробную часть
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2010, 22:16
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

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

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

Последний раз редактировалось Aetae, 03.11.2010 в 22:22.
Ответить с цитированием
  #4 (permalink)  
Старый 03.11.2010, 22:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Aetae, пример:

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

по-твоему человеку 1 год. Что не верно...
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2010, 01:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от ksa Посмотреть сообщение
Aetae, пример:

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

по-твоему человеку 1 год. Что не верно...
Не, тут как раз таки верно)
Но да, признаю, ступил.)
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2010, 01:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Tryman,
Поменяйте месяц и дату местами тут
var targetDate = new Date("[xfvalue_data]/[xfvalue_mec]/[xfvalue_god]")
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2010, 02:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Не, всё равно не точно будет ибо не в каждом году 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) )

Последний раз редактировалось Aetae, 05.11.2010 в 17:39.
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2010, 08:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Aetae
всё равно не точно будет
Мой вариант проверен годами. Используя его людям начисляют пособие... Оформляют пенсии...
Т.ч. отбрось сомнения и просто используй.
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2010, 11:29
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от ksa Посмотреть сообщение
Мой вариант проверен годами. Используя его людям начисляют пособие... Оформляют пенсии...
Т.ч. отбрось сомнения и просто используй.
Сообщение от ksa Посмотреть сообщение
Tryman, как вариант:
- переводи даты в числа формата ГГГГММДД
- просто вычисляй их разность
- дели на 10000
- отбрасывай дробную часть
Это логично и это первое о чём я подумал, но "просто изпользовать" не получится ибо кода нет)) И в js реализация будет громоздкой, ибо Date такой Date.
Ответить с цитированием
  #10 (permalink)  
Старый 05.11.2010, 19:05
Ламер
Отправить личное сообщение для DooMer Посмотреть профиль Найти все сообщения от DooMer
 
Регистрация: 19.02.2010
Сообщений: 295

рони,
Без обид, но выкинь свой говнокод
за 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())

Последний раз редактировалось DooMer, 05.11.2010 в 19:10.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расчет возраста nameivan Общие вопросы Javascript 13 30.05.2014 17:19
Калькулятор с выбором детали и расчет ее цены по введеным пораметрам Aquarius AJAX и COMET 16 31.03.2010 10:35
расчет стоимости annik Элементы интерфейса 2 02.12.2009 21:56
Расчет позиции с учетом скролла cker Элементы интерфейса 2 10.05.2009 18:49