Câu hỏi Làm cách nào để tính tuổi của người nào đó trong C #?


Đưa ra DateTime đại diện cho sinh nhật của một người, làm cách nào để tính tuổi của họ trong năm?


1744


gốc


những gì tất cả các câu trả lời cho đến nay đã bỏ lỡ là nó phụ thuộc vào nơi người được sinh ra và nơi họ đang ở ngay bây giờ. - Yaur
@Yaur: Chỉ cần chuyển đổi thời gian hiện tại + sinh thành GMT / UTC, tuổi chỉ là một giá trị tương đối, do đó múi giờ không liên quan. Để xác định múi giờ hiện tại của người dùng, bạn có thể sử dụng GeoLocating. - Stefan Steiger
Tại sao không xem xét [Julian Date] [1]? [1]: stackoverflow.com/questions/7103064/… - Muhammad Hewedy
Nếu chúng ta đang xem xét đề xuất tính toán theo múi giờ của @Yaur, nên Thời gian tiết kiệm ánh sáng ban ngày có ảnh hưởng đến tính toán theo bất kỳ cách nào không? - DDM
Không ai coi là năm nhuận? hoặc kiểm tra tháng? - Crash Override


Các câu trả lời:


Một giải pháp dễ hiểu và đơn giản.

// Save today's date.
var today = DateTime.Today;
// Calculate the age.
var age = today.Year - birthdate.Year;
// Go back to the year the person was born in case of a leap year
if (birthdate > today.AddYears(-age)) age--;

Tuy nhiên, điều này giả định bạn đang tìm kiếm miền Tây ý tưởng về tuổi tác và không sử dụng Đông Á.


1721



Chỉ muốn bình luận về hiệu suất DateTime.Now. Nếu bạn không cần giá trị múi giờ chính xác, hãy sử dụng DateTime.UtcNow nhanh hơn nhiều. - JAG
Do chúng ta đang nói sinh nhật bạn chỉ có thể sử dụng DateTime.Today cho phần thời gian không có liên quan. - Tristan Warner-Smith
Câu trả lời này không hoạt động với tất cả các ngôn ngữ và mọi lứa tuổi. Một số quốc gia đã bỏ qua các ngày sau khi sinh con người hiện tại, bao gồm Nga (1918), Hy Lạp (1924) và Thổ Nhĩ Kỳ (1926). - Lars D
Trên thực tế, nó vẫn không hoàn toàn chính xác. Mã này giả định rằng 'bday' là ngày tháng của một DateTime. Đó là một trường hợp cạnh tranh (tôi đoán hầu hết mọi người sẽ chỉ đi qua ngày và không phải ngày-thời gian), nhưng nếu bạn vượt qua trong một sinh nhật như là một ngày-và-thời gian mà thời gian lớn hơn 00:00:00 thì bạn ' sẽ chạy vào lỗi mà Danvil đã chỉ ra. Đặt bday = bday.Date sửa lỗi này. - Øyvind
Dòng cuối cùng khiến tôi suy nghĩ quá nhiều. Thay vào đó như thế nào về: if (bday.AddYears (age)> now) age--; Điều này có vẻ là một biểu hiện trực quan hơn. - cdiggins


Đây là một cách kỳ lạ để làm điều đó, nhưng nếu bạn định dạng ngày thành yyyymmdd và trừ ngày sinh từ ngày hiện tại rồi thả 4 chữ số cuối cùng bạn đã có độ tuổi :)

Tôi không biết C #, nhưng tôi tin rằng điều này sẽ làm việc trong bất kỳ ngôn ngữ nào.

20080814 - 19800703 = 280111 

Thả 4 chữ số cuối cùng = 28.

Mã C #:

int now = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
int dob = int.Parse(dateOfBirth.ToString("yyyyMMdd"));
int age = (now - dob) / 10000;

Hoặc cách khác mà không có tất cả các loại chuyển đổi trong các hình thức của một phương pháp mở rộng. Lỗi khi bỏ qua:

public static Int32 GetAge(this DateTime dateOfBirth)
{
    var today = DateTime.Today;

    var a = (today.Year * 100 + today.Month) * 100 + today.Day;
    var b = (dateOfBirth.Year * 100 + dateOfBirth.Month) * 100 + dateOfBirth.Day;

    return (a - b) / 10000;
}

894



Horray cho yyyymmdd. Sản phẩm cơ sở dữ liệu thứ nhất tôi đã sử dụng trên Pcá nhân Computer (khoảng năm 1981) lưu trữ ngày theo định dạng này. Thao tác ngày nào cũng dễ dàng hơn nhiều. - radarbob
Trên thực tế, điều này là rất tốt cho việc sử dụng trên MS-SQL với các trường datetime (tổng số ngày kể từ ngày 01-011900) - Patrik Eckebrecht
@numerek Vui lòng đăng các sửa đổi được đề xuất của bạn làm câu trả lời của riêng họ. Đối với những gì nó có giá trị, năm hiện tại 10000 là hư không gần một tràn số nguyên, bởi hai đơn đặt hàng của cường độ. 20.150.000 so với 2.147.483.648 - GalacticCowboy
@LongChalk 20180101 - 20171231 = 8870. Thả 4 chữ số cuối cùng và bạn có (ngụ ý) 0 cho độ tuổi. Lam sao bạn lây được 1? - Rufus L
@flindeberg Vâng, đó là những gì tôi đã nói với LongChalk ... - Rufus L


Tôi không biết làm thế nào giải pháp sai có thể được chấp nhận. Đoạn mã C # chính xác được viết bởi Michael Stum

Đây là đoạn trích kiểm tra:

DateTime bDay = new DateTime(2000, 2, 29);
DateTime now = new DateTime(2009, 2, 28);
MessageBox.Show(string.Format("Test {0} {1} {2}",
                CalculateAgeWrong1(bDay, now),     // outputs 9
                CalculateAgeWrong2(bDay, now),     // outputs 9
                CalculateAgeCorrect(bDay, now)));  // outputs 8

Ở đây bạn có các phương pháp:

public int CalculateAgeWrong1(DateTime birthDate, DateTime now)
{
    return new DateTime(now.Subtract(birthDate).Ticks).Year - 1;
}

public int CalculateAgeWrong2(DateTime birthDate, DateTime now)
{
    int age = now.Year - birthDate.Year;

    if (now < birthDate.AddYears(age))
        age--;

    return age;
}

public int CalculateAgeCorrect(DateTime birthDate, DateTime now)
{
    int age = now.Year - birthDate.Year;

    if (now.Month < birthDate.Month || (now.Month == birthDate.Month && now.Day < birthDate.Day))
        age--;

    return age;
}

345



Đầu ra là -Test 9 9 8 - MoXplod
Trong khi mã này hoạt động, nó khẳng định rằng một người sinh ra trong một ngày nhuận sẽ đạt được độ tuổi tiếp theo vào ngày 1 tháng 3 vào những năm không phải là năm nhuận, thay vì vào ngày 28 tháng Hai. Thực tế, một trong hai lựa chọn có thể đúng. Wikipedia có điều gì đó để nói về điều này. Vì vậy, trong khi mã của bạn không phải là "sai", không phải là giải pháp được chấp nhận. - Matt Johnson
@ MattJohnson Tôi nghĩ điều đó thực sự đúng. Nếu bday của tôi là ngày 29 tháng 2, thì ngày 28 tháng 2 bday của tôi đã không trôi qua, và tôi vẫn phải bằng tuổi 27 tháng Hai. Tuy nhiên, vào ngày 1 tháng 3, chúng tôi đã vượt qua bday của mình và tôi sẽ là tuổi tiếp theo. Tại Hoa Kỳ, một doanh nghiệp bán rượu sẽ có một dấu hiệu cho biết một cái gì đó như "Nếu bạn được sinh ra sau ngày này trong YYYY, bạn không thể mua rượu" (nơi YYYY thay đổi mỗi năm). Điều đó có nghĩa là một người nào đó sinh vào ngày 29 tháng 2 không thể mua rượu vào ngày 28 tháng 2 trong năm họ biến 21 (hầu hết các địa điểm), và hỗ trợ cho ý tưởng rằng họ không lớn hơn một năm cho đến ngày 1 tháng Ba. - jfren484
@ jfren484 - đọc bài viết trên Wikipedia. Nó thay đổi đáng kể trên toàn khu vực pháp lý. - Matt Johnson
@ jfren484 Yêu cầu của bạn hoàn toàn không liên quan gì tới triết học; nhưng mọi thứ phải làm với cảm giác cá nhân của riêng bạn. Khi một người được sinh ra vào ngày 29 tháng 2 "tuổi" phần lớn không quan trọng trừ khi tuổi tạo thành 'ranh giới tuổi hợp pháp' (ví dụ: Có thể mua rượu, bỏ phiếu, nhận trợ cấp, tham gia quân đội, lấy giấy phép lái xe). Hãy xem xét tuổi uống rượu của Mỹ (21 tuổi): Đối với hầu hết mọi người là 7670 ngày. Đó là 7671 ngày nếu sinh trước ngày 29 tháng 2 trong năm nhuận hoặc từ ngày 1 tháng 3 trước năm nhuận. Nếu sinh ngày 29 tháng 2: 28 tháng 2 là 7670 ngày và 1 tháng 3 là 7671 ngày. Sự lựa chọn là tùy ý Nó có thể đi một trong hai cách. - Craig Young


Tôi không nghĩ bất kỳ câu trả lời nào cho đến nay cung cấp cho các nền văn hóa tính toán tuổi khác nhau. Xem, ví dụ, Đông Á tuổi Reckoning so với ở phương Tây.

Bất kì thực câu trả lời phải bao gồm nội địa hóa. Các Mẫu chiến lược có lẽ sẽ theo thứ tự trong ví dụ này.


115



Từ bài viết wikipedia mà bạn đã cung cấp: "Ở Trung Quốc và Nhật Bản, nó được sử dụng cho truyền thống nói về tài sản hoặc tôn giáo, và nó đang biến mất trong cuộc sống hàng ngày giữa các dân tộc trong thành phố." - some
@some - người Hàn Quốc vẫn sử dụng hệ thống này chủ yếu. - Justin L.
Trên thực tế, khái niệm này có thể khá quan trọng - mọi người không thích bị nói với thông tin cá nhân của họ không chính xác. Ví dụ, một nửa gia đình tôi sống ở Malaysia và một nửa ở Anh. Ngay bây giờ tuổi của tôi được coi là hai năm cao hơn khi tôi ở một bên của gia đình tôi hơn với người kia. - Phil Gan
Không chỉ chúng tôi hệ thống này được sử dụng chủ yếu ở Hàn Quốc, nhưng như một du khách thảo luận về lứa tuổi với người dân địa phương, người dân địa phương sẽ lịch sự đề cập đến chính mình vào năm sinh của họ. Tôi không 25 tuổi, tôi 87 tuổi. Tôi thích cách tiếp cận này tốt hơn. nhiều hơn một 'định dạng ngày sinh quốc tế' - Dean Rather
Ở Việt Nam, trong cuộc sống hàng ngày ngay cả khi hệ thống phương Tây được sử dụng, tuổi tác được tính toán đơn thuần bằng cách trừ đi các năm. Ngày bị loại trừ - phuclv


Câu trả lời đơn giản cho điều này là áp dụng AddYears như được hiển thị bên dưới vì đây là phương pháp gốc duy nhất để thêm năm vào ngày 29 tháng 2 của năm nhuận và có kết quả chính xác vào ngày 28 tháng 2 cho các năm chung.

Một số người cảm thấy rằng ngày 1 tháng 3 là sinh nhật của các lá cờ nhưng không phải. Net cũng không có quy tắc chính thức nào hỗ trợ điều này, cũng không phải logic chung giải thích tại sao một số sinh vào tháng 2 phải có 75% ngày sinh của họ trong tháng khác.

Hơn nữa, một phương thức Age cho chính nó được thêm vào như một phần mở rộng DateTime. Bằng cách này bạn có thể lấy tuổi theo cách đơn giản nhất có thể:

  1. Mục danh sách

int age = birthDate.Age ();

public static class DateTimeExtensions
{
    /// <summary>
    /// Calculates the age in years of the current System.DateTime object today.
    /// </summary>
    /// <param name="birthDate">The date of birth</param>
    /// <returns>Age in years today. 0 is returned for a future date of birth.</returns>
    public static int Age(this DateTime birthDate)
    {
        return Age(birthDate, DateTime.Today);
    }

    /// <summary>
    /// Calculates the age in years of the current System.DateTime object on a later date.
    /// </summary>
    /// <param name="birthDate">The date of birth</param>
    /// <param name="laterDate">The date on which to calculate the age.</param>
    /// <returns>Age in years on a later day. 0 is returned as minimum.</returns>
    public static int Age(this DateTime birthDate, DateTime laterDate)
    {
        int age;
        age = laterDate.Year - birthDate.Year;

        if (age > 0)
        {
            age -= Convert.ToInt32(laterDate.Date < birthDate.Date.AddYears(age));
        }
        else
        {
            age = 0;
        }

        return age;
    }
}

Bây giờ, chạy thử nghiệm này:

class Program
{
    static void Main(string[] args)
    {
        RunTest();
    }

    private static void RunTest()
    {
        DateTime birthDate = new DateTime(2000, 2, 28);
        DateTime laterDate = new DateTime(2011, 2, 27);
        string iso = "yyyy-MM-dd";

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                Console.WriteLine("Birth date: " + birthDate.AddDays(i).ToString(iso) + "  Later date: " + laterDate.AddDays(j).ToString(iso) + "  Age: " + birthDate.AddDays(i).Age(laterDate.AddDays(j)).ToString());
            }
        }

        Console.ReadKey();
    }
}

Ví dụ về ngày tháng quan trọng là:

Ngày sinh: 2000-02-29 Ngày sau: 2011-02-28 Tuổi: 11

Đầu ra:

{
    Birth date: 2000-02-28  Later date: 2011-02-27  Age: 10
    Birth date: 2000-02-28  Later date: 2011-02-28  Age: 11
    Birth date: 2000-02-28  Later date: 2011-03-01  Age: 11
    Birth date: 2000-02-29  Later date: 2011-02-27  Age: 10
    Birth date: 2000-02-29  Later date: 2011-02-28  Age: 11
    Birth date: 2000-02-29  Later date: 2011-03-01  Age: 11
    Birth date: 2000-03-01  Later date: 2011-02-27  Age: 10
    Birth date: 2000-03-01  Later date: 2011-02-28  Age: 10
    Birth date: 2000-03-01  Later date: 2011-03-01  Age: 11
}

Và cho ngày sau đó 2012-02-28:

{
    Birth date: 2000-02-28  Later date: 2012-02-28  Age: 12
    Birth date: 2000-02-28  Later date: 2012-02-29  Age: 12
    Birth date: 2000-02-28  Later date: 2012-03-01  Age: 12
    Birth date: 2000-02-29  Later date: 2012-02-28  Age: 11
    Birth date: 2000-02-29  Later date: 2012-02-29  Age: 12
    Birth date: 2000-02-29  Later date: 2012-03-01  Age: 12
    Birth date: 2000-03-01  Later date: 2012-02-28  Age: 11
    Birth date: 2000-03-01  Later date: 2012-02-29  Age: 11
    Birth date: 2000-03-01  Later date: 2012-03-01  Age: 12
}

99



Một bình luận liên quan đến việc sinh nhật ngày 29 tháng 2 vào ngày 1 tháng 3, về mặt kỹ thuật, việc có nó vào ngày 28 là quá sớm (thực tế sớm hơn 1 ngày). Ngày 1 là một ngày quá muộn. Nhưng kể từ khi sinh nhật giữa, sử dụng số 1 để tính tuổi trong những năm không nhuận sẽ có ý nghĩa hơn với tôi, vì người đó thực sự là cũ vào ngày 1 tháng 3 (và thứ 2 và thứ 3) mỗi năm, nhưng không phải vào ngày 28 tháng 2. - CyberClaw


Đề xuất của tôi

int age = (int) ((DateTime.Now - bday).TotalDays/365.242199);

Điều đó dường như có năm thay đổi vào đúng ngày. (Tôi đã kiểm tra tại chỗ đến tuổi 107)


76



365.255 đến từ đâu? Tôi không nghĩ rằng điều này sẽ làm việc nói chung. - dreeves
365 cho những ngày trong một năm. +0,25 cho năm nhuận. +0,005 cho các chỉnh sửa khác - James Curran
Tôi không nghĩ Harry Patch sẽ đánh giá cao phương pháp thử nghiệm tại chỗ của bạn: latimes.com/news/obituaries/… - MusiGenesis
Độ dài trung bình của một năm trong Lịch Gregorian là 365,2425 ngày. - dan04
^^ Bởi vì đôi khi nó quan trọng. Trong thử nghiệm của tôi điều này không thành công vào ngày sinh nhật của người, nó báo cáo họ trẻ hơn họ. - ChadT


Một chức năng khác, không phải của tôi mà được tìm thấy trên web và tinh chỉnh nó một chút:

public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year - birthDate.Year;

    if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
        age--;

    return age;
}

Chỉ có hai điều đi vào tâm trí của tôi: Điều gì về những người từ các quốc gia không sử dụng lịch gregorian? DateTime.Now nằm trong nền văn hóa cụ thể của máy chủ mà tôi nghĩ. Tôi hoàn toàn hiểu biết về việc thực sự làm việc với lịch châu Á và tôi không biết liệu có cách nào dễ dàng chuyển đổi ngày giữa lịch nhưng chỉ trong trường hợp bạn đang thắc mắc về những người Trung Quốc đó từ năm 4660 :-)


65



Điều này xuất hiện để xử lý các khu vực khác nhau (định dạng ngày) tốt nhất. - webdad3


Tôi đến trễ bữa tiệc, nhưng đây là một lớp lót:

int age = new DateTime(DateTime.Now.Subtract(birthday).Ticks).Year-1;

44



Nó bị hỏng. Made testable: public static int CalculateAge (DateTime dateOfBirth, DateTime dateToCalculateAge) {return new DateTime (dateToCalculateAge.Subtract (dateOfBirth) .Ticks) .Year - 1; } ... Cho 14 tuổi khi tôi nhập 1990-06-01 và tính tuổi vào ngày TRƯỚC KHI sinh nhật thứ 14 của mình (1990-05-31). - Kjensen


2 Các vấn đề chính cần giải quyết là:

1. Tính tuổi chính xác - trong năm, tháng, ngày, v.v.

2. Tính tuổi nhận thức chung - mọi người thường không quan tâm họ chính xác bao nhiêu tuổi, họ chỉ quan tâm khi sinh nhật của họ trong năm hiện tại là.


Giải pháp cho 1 là rõ ràng:

DateTime birth = DateTime.Parse("1.1.2000");
DateTime today = DateTime.Today;     //we usually don't care about birth time
TimeSpan age = today - birth;        //.NET FCL should guarantee this as precise
double ageInDays = age.TotalDays;    //total number of days ... also precise
double daysInYear = 365.2425;        //statistical value for 400 years
double ageInYears = ageInDays / daysInYear;  //can be shifted ... not so precise

Giải pháp cho 2 là yếu tố không chính xác trong việc xác định tổng độ tuổi, nhưng được mọi người cho là chính xác. Mọi người cũng thường sử dụng nó, khi họ tính tuổi của họ "bằng tay":

DateTime birth = DateTime.Parse("1.1.2000");
DateTime today = DateTime.Today;
int age = today.Year - birth.Year;    //people perceive their age in years

if (today.Month < birth.Month ||
   ((today.Month == birth.Month) && (today.Day < birth.Day)))
{
  age--;  //birthday in current year not yet reached, we are 1 year younger ;)
          //+ no birthday for 29.2. guys ... sorry, just wrong date for birth
}

Ghi chú 2:

  • Đây là giải pháp ưa thích của tôi
  • Chúng tôi không thể sử dụng DateTime.DayOfYear hoặc TimeSpans, vì chúng thay đổi số ngày trong năm nhuận
  • Tôi đã đặt thêm ít dòng để dễ đọc hơn

Chỉ cần thêm một lưu ý nữa ... Tôi sẽ tạo ra 2 phương thức quá tải tĩnh cho nó, một phương thức sử dụng phổ quát, thứ hai cho mức độ thân thiện với người dùng:

public static int GetAge(DateTime bithDay, DateTime today) 
{ 
  //chosen solution method body
}

public static int GetAge(DateTime birthDay) 
{ 
  return GetAge(birthDay, DateTime.Now);
}

44





Nhiều năm trước, để cung cấp tuổi máy tính mánh lới quảng cáo trên trang web của tôi, tôi đã viết một hàm để tính tuổi thành một phần nhỏ. Đây là một cổng nhanh của hàm đó tới C # (từ phiên bản PHP). Tôi sợ rằng tôi đã không thể kiểm tra phiên bản C #, nhưng hy vọng bạn sẽ thích tất cả!

(Phải thừa nhận rằng đây là một chút phô trương cho mục đích hiển thị hồ sơ người dùng trên Stack Overflow, nhưng có lẽ độc giả sẽ tìm thấy một số sử dụng cho nó. :-))

double AgeDiff(DateTime date1, DateTime date2) {
    double years = date2.Year - date1.Year;

    /*
     * If date2 and date1 + round(date2 - date1) are on different sides
     * of 29 February, then our partial year is considered to have 366
     * days total, otherwise it's 365. Note that 59 is the day number
     * of 29 Feb.
     */
    double fraction = 365
            + (DateTime.IsLeapYear(date2.Year) && date2.DayOfYear >= 59
            && (date1.DayOfYear < 59 || date1.DayOfYear > date2.DayOfYear)
            ? 1 : 0);

    /*
     * The only really nontrivial case is if date1 is in a leap year,
     * and date2 is not. So let's handle the others first.
     */
    if (DateTime.IsLeapYear(date2.Year) == DateTime.IsLeapYear(date1.Year))
        return years + (date2.DayOfYear - date1.DayOfYear) / fraction;

    /*
     * If date2 is in a leap year, but date1 is not and is March or
     * beyond, shift up by a day.
     */
    if (DateTime.IsLeapYear(date2.Year)) {
        return years + (date2.DayOfYear - date1.DayOfYear
                - (date1.DayOfYear >= 59 ? 1 : 0)) / fraction;
    }

    /*
     * If date1 is not on 29 February, shift down date1 by a day if
     * March or later. Proceed normally.
     */
    if (date1.DayOfYear != 59) {
        return years + (date2.DayOfYear - date1.DayOfYear
                + (date1.DayOfYear > 59 ? 1 : 0)) / fraction;
    }

    /*
     * Okay, here date1 is on 29 February, and date2 is not on a leap
     * year. What to do now? On 28 Feb in date2's year, the ``age''
     * should be just shy of a whole number, and on 1 Mar should be
     * just over. Perhaps the easiest way is to a point halfway
     * between those two: 58.5.
     */
    return years + (date2.DayOfYear - 58.5) / fraction;
}

33



Thật tuyệt. Mặc dù tôi chỉ đơn giản là sử dụng những năm thiên văn. - IllidanS4


Đây là phiên bản chúng tôi sử dụng ở đây. Nó hoạt động, và nó khá đơn giản. Đó là ý tưởng tương tự như của Jeff nhưng tôi nghĩ rằng nó là một chút rõ ràng hơn vì nó tách ra khỏi logic để trừ một, vì vậy nó dễ hiểu hơn một chút.

public static int GetAge(this DateTime dateOfBirth, DateTime dateAsAt)
{
    return dateAsAt.Year - dateOfBirth.Year - (dateOfBirth.DayOfYear < dateAsAt.DayOfYear ? 0 : 1);
}

Bạn có thể mở rộng toán tử bậc ba để làm cho nó rõ ràng hơn, nếu bạn nghĩ rằng điều đó không rõ ràng.

Rõ ràng điều này được thực hiện như là một phương pháp mở rộng trên DateTime, nhưng rõ ràng bạn có thể lấy một dòng mã mà làm công việc và đặt nó ở bất cứ đâu. Ở đây chúng tôi có một tình trạng quá tải khác của phương thức Extension. DateTime.Now, chỉ để hoàn thành.


33



Tôi nghĩ rằng điều này có thể được tắt bởi một ngày khi chính xác một trong dateOfBirth hoặc dateAsAt rơi trong một năm nhuận. Hãy xem xét tuổi của một người sinh ngày 1 tháng 3 năm 2003 vào ngày 29 tháng 2 năm 2004. Để khắc phục điều này, bạn cần phải so sánh từ vựng của các cặp (Month, DayOfMonth) và sử dụng nó cho điều kiện. - Doug McClean
nó cũng sẽ không hiển thị đúng độ tuổi như sinh nhật của bạn. - dotjoe