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

d00ker 19.05.2013 17:06

Вычисление возраста
 
У меня есть одностраничный сайт. Там есть блок с БИО, где указан мой возраст. Мне нужен такой скрипт, в котором я укажу дату своего рождения, а скрипт будет мне выводит мой текущий возраст. Как такое сделать? :help:

monolithed 19.05.2013 17:28

Чтобы получить количество лет на основе только года:
var get_current_age = function(date) {
  return new Date().getFullYear() - date;
};

alert(get_current_age(1986));

Riim 19.05.2013 17:36

/**
	 * @param {Date|Number} birthDate
	 *
	 * @returns {Number}
	 */
	function birthDateToAge(birthDate) {
		birthDate = new Date(birthDate);

		var now = new Date(),
			age = now.getFullYear() - birthDate.getFullYear();

		return now.setFullYear(1972) < birthDate.setFullYear(1972) ? age - 1 : age;
	}

monolithed 19.05.2013 17:36

На основе полной даты:
function get_current_age(date) {
  return ((new Date().getTime() - new Date(date)) / (24 * 3600 * 365.25 * 1000)) | 0;
}

alert(get_current_age('1986-09-18'));

Aetae 19.05.2013 17:50

<script>
var birth = new Date(1990, 3 - 1, 16); //дата рождения
var year = birth.getFullYear(); 
var today = new Date();

document.write( today.getFullYear() - year - (today.getTime() < birth.setFullYear(year)) )
</script>


Дата рождения указывается в следующем порядке: год, месяц, день, час, минута, секунда, милисекунда. Всё кроме года можно пр желании опустить. Месяц отсчитывается с нуля (0-11).

Цитата:

Сообщение от monolithed (Сообщение 251495)
На основе полной даты:

Это приблизительно же =\

Riim 19.05.2013 18:00

birth.setFullYear(year)

если birth будет 29 февраля, а year не высокосным?

d00ker 19.05.2013 18:05

Цитата:

Сообщение от Aetae (Сообщение 251496)
<script>
var birth = new Date(1990, 3 - 1, 16); //дата рождения
var year = birth.getFullYear(); 
var today = new Date();

document.write( today.getFullYear() - year - (today.getTime() < birth.setFullYear(year)) )
</script>


Дата рождения указывается в следующем порядке: год, месяц, день, час, минута, секунда, милисекунда. Всё кроме года можно пр желании опустить. Месяц отсчитывается с нуля (0-11).


Это приблизительно же =\

Если я это запихаю в main.js , как мне это потом на html странице вывести?

Aetae 19.05.2013 18:06

Цитата:

Сообщение от Riim (Сообщение 251497)
birth.setFullYear(year)

если birth будет 29 февраля, а year не высокосным?

Если дата рожения указана с точностью до дня - то проблем не будет, т.к. будет учитываться только то, что 28ое закончилось. А вот если будут указаны часы то сравнение 29ого будет идти с первым числом и тогда действительно в случае с днём рождения 29 февраля и датой выполнения скрипта 1 марта не високосного - будет косяк. Твой вариант вернее.)

Цитата:

Сообщение от d00ker (Сообщение 251498)
Если я это запихаю в main.js , как мне это потом на html странице вывести?

Используйте вариант от Riim. Его функция на вход принимает дату в том формате что у меня birth.
Для вывода в нужном месте страницы добавьте:
<script>document.write( birthDateToAge(new Date(1990, 3 - 1, 16)) )</script>
Если нужен вывод конкретно из скрипта - выводите также как и всё остальное, что вы выводите из скрипта: мы не знаем что у вас там и как.

d00ker 19.05.2013 18:13

А 3 - 1 что значит? Точнее зачем 1 отнимаем?

Riim 19.05.2013 18:14

Aetae,
хотя у тебя вообще не верно написано, смотри, ты birth устанавливаешь год, который от него же и взят, нужно брать год от todey, а так как возможна ситуация с 29 февраля, нужно вообще обоим датам любой высокосный год присваивать.


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