Конвертировать миллисекунды в годы

0

У меня есть валидатор, который проверяет, является ли пользователь не моложе 18 лет.

Это проверка:

        var res = /^([1-2]\d{3})\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])\-([0-9]{4})$/.exec(str);
        var todays_date = new Date();
        var birth_date = null;

        if (res != null) {
            birth_date = new Date(res[1], res[2], res[3]);
            if (todays_date - birth_date > 565633905872) {

565633905872 составляет 18 лет в миллисекундах. но как я могу преобразовать его в годы, прежде чем я могу просто сделать

if (todays_date - birth_date => 18) {
  • 2
    Подсказка: в году примерно 31 557 600 секунд.
  • 3
    «565633905872 - это 18 лет в миллисекундах» - вы в этом уверены? (Это число слишком мало, даже если вы игнорируете високосные годы ...)
Показать ещё 4 комментария
Теги:

3 ответа

4
Лучший ответ

Число, которое вы указали, - это не количество миллисекунд за 18 лет. Он слишком мал, даже если вы притворяетесь, что нет високосных лет.

Самый простой способ проверить, кому-то не моложе 18 лет, - инициализировать объект даты до своего дня рождения, а затем использовать .getFullYear() и .setFullYear() чтобы напрямую установить год на 18 лет вперед. Затем сравните это с текущей датой.

Также обратите внимание, что в датах JS месяц основан на нуле, поэтому вы, вероятно, захотите использовать res[2] - 1 при создании объекта даты.

birth_date = new Date(res[1], res[2] - 1, res[3]);
birth_date.setFullYear(birth_date.getFullYear() + 18);
if (birth_date <= new Date()) {

Или, учитывая, что вы birth_date из отдельного года, месяца и дня, вы можете просто сделать:

birthPlus18 = new Date(+res[1] + 18, res[2] - 1, res[3]);
if (birthPlus18 <= new Date()) {

(Ведущий + в +res[1] + 18 не является опечаткой, он преобразует строку, извлеченную вашим регулярным выражением, в число, чтобы вы могли добавить к ней 18. Вам не нужно делать то же самое для res[2] - 1 потому что - автоматически преобразует оба операнда.)

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

  • 0
    Да, это намного лучше
  • 0
    Спасибо, отлично работает!
1

Разделите свою миллисекунду на 31536000000, вы получите количество лет

http://www.convertunits.com/from/milliseconds/to/year

  • 1
    Нет, ты не Как насчет високосных лет?
0

Есть лучшие способы проверить это (см. Ответ "nnnnnn"). Но ваш вопрос был не о лучшем способе, а о том, как вы могли бы преобразовать в годы.

Вы можете написать функцию, которая делает это, например:

function convertmili( mSeconds )
{
    return mSeconds / 31536000000;
}

Выход этой функции еще далек от идеала, потому что ваш пример будет выводить: 17.9361334941654

Таким образом, мы могли бы немного почистить его:

function convertmili( mSeconds )
{
    var checkYear = Math.floor(mSeconds / 31536000000);
    return checkYear;
}

С помощью этой функции ваш пример будет выводить 17, а затем вы можете проверить его так, как вы хотели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню