Как я могу преобразовать строку дня рождения в возраст в actionscript3? - PullRequest
1 голос
/ 30 марта 2011

Например, если бы мне дали строку «01.01.1980». Как я мог тогда узнать текущую дату, затем выяснить, сколько лет кому-то, а потом просто вернуть, сколько ему лет?

Я видел тему по этому вопросу в C ++, но я не знаком с ней, кто-нибудь знает, как это будет сделано в AS3?

редактировать: я думаю, что самое сложное время, с которым я сталкиваюсь, это то, как я бы разбил оригинальную строку со дня рождения, с которой я начинаю, в переменные месяца, дня, года

Ответы [ 4 ]

3 голосов
/ 30 марта 2011

Чувак, многим людям здесь нравится сложный сложный код. Вот как вы это упростите:

// Parse the date string     
var dob:Date = DateFormatter.parseDateString("03/30/2001");
// Get todays timestamp at 00:00:00
var today:Date = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());
// Do the age differrence
var age:uint = today.getFullYear() - dob.getFullYear();
// Set DOB to this year
dob.setFullYear(today.getFullYear());
// Check to see if we haven't passed today's date
if(dob.getTime() < today.getTime()){ age--; }

Из проведенных мною тестов это точность 100%, и я думаю, что это должно быть самое быстрое, что вы можете сделать, поскольку вы не выполняете никакого округления или сложной математики, только условные.

2 голосов
/ 30 марта 2011

проверить эту ссылку ( GOOGLE - ВАШ ДРУГ: -) )

Код (прямая копия с сайта):

function calculateAge(birthdate:Date):Number {
    var dtNow:Date = new Date();// gets current date
    var currentMonth:Number = dtNow.getMonth();
    var currentDay:Number = dtNow.getDay();
    var currentYear:Number = dtNow.getFullYear();

    var bdMonth:Number = birthdate.getMonth();
    var bdDay:Number = birthdate.getDay();
    var bdYear:Number = birthdate.getFullYear();

    // get the difference in years
    var years:Number = dtNow.getFullYear() - birthdate.getFullYear();
    // subtract another year if we're before the
    // birth day in the current year
    if (currentMonth < bdMonth || (currentMonth == bdMonth && currentDay < bdDay)) {
        years--;
    }
    return years;
}

function dateStringToObject(dateString):Date {
    var date_ar = dateString.split("/");
    return new Date(date_ar[2],date_ar[0] - 1,date_ar[1]);
}

var dateNow:Date = new Date();
var checkDate:String = "11/25/1976";
var dateBirthday:Date = dateStringToObject(checkDate);
trace("dateNow = "+dateNow);
trace("dateBirthday = "+dateBirthday);
trace("age = "+calculateAge(dateBirthday));
0 голосов
/ 30 марта 2011
var nowDate:Date = new Date( )
var bDate:Date = new Date( '01/01/1980' )
var age:Number = nowDate.getFullYear() - bDate.getFullYear()
if( nowDate.getUTCMonth()*100 + nowDate.getUTCDay() < bDate.getUTCMonth()*100 + bDate.getUTCDay()  ){
  --age
}
trace(age)
0 голосов
/ 30 марта 2011

Проверьте этот вопрос . У него есть действительно блестящее решение.

var today = new Date()
var birthday = new Date(1980, 00, 12)  //this is the birthday, you can have this be an input to a function as well if you wanted

var bigToday:int = today.getFullYear()*10000+(today.getMonth()+1)*100+today.getDate();
var bigBDay:int = birthday.getFullYear()*10000+(birthday.getMonth()+1)*100+birthday.getDate();

var diff:int = bigToday-bigBDay
var age:int = diff/10000

trace (age)
...