Получить возраст пользователя?

265
12 августа 2017, 05:06

Нужно определить точный возраст пользователя. поэтому сначала перевожу все в миллисекунды. Но показывает неверный год и возраст соответственно. В чем ошибка?

const today = +new Date();
const birthday =  +new Date('01.02.1994');
const diff = today - birthday;
const obj = new Date(diff);
const age = new Date().getFullYear() - obj.getFullYear();
Answer 1

В javascript объекта Date при преобразовании в Number всегда возвращает UNIX timestamp в миллисекундах (прошедшее кол-во миллисекунда с 1970 года).

Ваш diff это количество миллисекунд прошедшие со дня рождения до текущего времени (не забываем про високосные года).

Затем по этому diff вы получаете дату, т.е. к 1970 году прибавляем diff миллисекунд и получаем тыкву у которой берем год и вычитаем его из текущего года.

Для корректного вычисления возраста лучше работать с количеством дней до текущей даты и количеством дней до дня рождения, а что бы избежать проблем с високосными годами нужно приравнять любой месяц к 31 дням. В итоге получаем примерно такое

const today = new Date(); 
const birthday = new Date("01.02.1994");
const todayD = (today.getFullYear()*12 + today.getMonth())*31+today.getDate()-1;
const birthdayD = (birthday.getFullYear()*12 + birthday.getMonth())*31+birthday.getDate()-1;
const age = (todayD - birthdayD)/31/12;
READ ALSO
Не выходит вывести вложенный объект json

Не выходит вывести вложенный объект json

Не могу понять в чем проблемаНе могу вывести объект - пишет undefined

361
Заполнение 2х пунктов одновременно (form)

Заполнение 2х пунктов одновременно (form)

Есть 2 формы на одной странице , есть много повторяющихся пунктов , можно как то на JS сделать , что бы одинаковые заполнялись одновременно или...

283
Ошибка TypeError: The super constructor to `inherits` must have a prototype

Ошибка TypeError: The super constructor to `inherits` must have a prototype

Доброго времени сутокУже долгое время я пытаюсь запустить скрипт, перепробовал много разных способов, но всё напрасно

376