Szukam sposobu na obliczenie wieku osoby, biorąc pod uwagę jej datę urodzenia w formacie dd / mm / rrrr.
Używałem następującej funkcji, która działała dobrze przez kilka miesięcy, aż jakiś błąd spowodował, że pętla while nigdy się nie kończyła i zatrzymała całą witrynę. Ponieważ prawie 100 000 DOB przechodzi przez tę funkcję kilka razy dziennie, trudno jest określić, co było tego przyczyną.
Czy ktoś ma bardziej wiarygodny sposób obliczania wieku?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
EDYCJA: ta funkcja wydaje się działać poprawnie, ale zwraca „40” dla daty urodzenia z dnia 14/09/1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. wygląda na to, że php przeliczył sięstrtotime()
z tym formatem.strtotime
doskonale rozumie formaty dat, nie musisz się martwić:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
php.net/manual/en/function.strtotime.phpOd PHP 5.3.0 możesz użyć poręcznego,
DateTime::createFromFormat
aby upewnić się, że twoja data nie zostanie pomylona zm/d/Y
formatem iDateInterval
klasą (viaDateTime::diff
), aby uzyskać liczbę lat między teraz a datą docelową.źródło
źródło
Używam do tego daty / czasu:
źródło
Prosta metoda obliczania wieku od dnia urodzenia:
31556926
to liczba sekund w roku.źródło
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Kalkulator wieku
źródło
Uważam, że to działa i jest proste.
Odejmij od 1970, ponieważ strtotime oblicza czas od 1970-01-01 ( http://php.net/manual/en/function.strtotime.php )
Wyniki:
źródło
Jeśli chcesz określić wiek używania numeru dobowego, możesz również użyć tej funkcji. Używa obiektu DateTime.
źródło
Pomyślałem, że wrzucę to tutaj, ponieważ wydaje się, że jest to najpopularniejsza forma tego pytania.
Przeprowadziłem 100-letnie porównanie trzech najpopularniejszych funkcji wieku, jakie mogłem znaleźć dla PHP, i opublikowałem wyniki (a także funkcje) na moim blogu .
Jak widać nie wszystkie 3 funcs preform dobrze tylko z różnicą na 2. funkcji. Moja sugestia oparta na moich wynikach to użycie trzeciej funkcji, chyba że chcesz zrobić coś konkretnego w urodziny danej osoby, w takim przypadku pierwsza funkcja zapewnia prosty sposób na zrobienie tego dokładnie.
Moje sugestie po mojej 100-letniej recenzji:
Jeśli chcesz czegoś bardziej wydłużonego, abyś mógł uwzględnić takie okazje jak urodziny i takie:
Ale jeśli po prostu chcesz znać wiek i nic więcej, to:
Zobacz BLOG
Kluczowa uwaga dotycząca
strtotime
metody:źródło
Możesz skorzystać z
Carbon
biblioteki , która jest rozszerzeniem API dla DateTime.Możesz:
lub:
źródło
age
, jaką jestdiffInYears
. Możesz więc napisać:(new \Carbon\Carbon($date))->age
Jeśli nie potrzebujesz dużej precyzji, wystarczy liczba lat, możesz rozważyć użycie poniższego kodu ...
Wystarczy umieścić to w funkcji i zastąpić datę „1971-11-20” zmienną.
Należy pamiętać, że precyzja powyższego kodu nie jest wysoka ze względu na lata przestępne, tj. Mniej więcej co 4 lata dni mają wartość 366 zamiast 365. Wyrażenie 60 * 60 * 24 * 365 oblicza liczbę sekund w jednym roku - można zamień go na 31536000.
Inną ważną rzeczą jest to ze względu na użycie systemu UNIX Timestamp występuje problem zarówno z rokiem 1901, jak i rokiem 2038, co oznacza, że powyższe wyrażenie nie będzie działać poprawnie dla dat przed rokiem 1901 i po roku 2038.
Jeśli możesz żyć z ograniczeniami wymienionymi powyżej, ten kod powinien działać dla Ciebie.
źródło
źródło
źródło
Uważam, że ten skrypt jest niezawodny. Przyjmuje format daty RRRR-mm-dd, ale można go dość łatwo zmodyfikować dla innych formatów.
źródło
źródło
i18n:
źródło
Wypróbuj dowolne z nich przy użyciu obiektu DateTime
Odniesienia http://www.calculator.net/age-calculator.html
źródło
Napisz skrypt PHP, aby obliczyć aktualny wiek osoby.
Przykładowa data urodzenia: 11.4.1987
Przykładowe rozwiązanie:
Kod PHP:
Przykładowe dane wyjściowe:
Twój wiek: 30 lat, 3 miesiące, 0 dni
źródło
to moja funkcja do obliczania DOB z określonym zwrotem wieku według roku, miesiąca i dnia
jak tego używać
źródło
Ta funkcja zwróci wiek w latach. Wartość wejściowa to ciąg znaków daty urodzenia w formacie daty (RRRR-MM-DD), np. 2000-01-01
Działa z dzienną precyzją
Pozdrawiam, Nira
źródło
Jeśli nie możesz korzystać z niektórych nowszych funkcji, oto coś, co przygotowałem. Prawdopodobnie więcej niż potrzebujesz i jestem pewien, że istnieją lepsze sposoby, ale jest łatwy do odczytania, więc powinien wystarczyć:
Przykładowe zastosowanie:
Mam nadzieję że to pomoże.
źródło
Ze względu na rok przestępny nie jest rozsądne po prostu odejmowanie jednej daty od drugiej i odkładanie jej na liczbę lat. Aby obliczyć wiek jak ludzie, będziesz potrzebować czegoś takiego:
źródło
Poniższe działa świetnie dla mnie i wydaje się być o wiele prostsze niż przykłady, które zostały już podane.
Przetestowałem i aktywnie używam tego kodu, może wydawać się trochę uciążliwy, ale jest bardzo prosty w obsłudze i edycji oraz jest dość dokładny.
źródło
Zgodnie z pierwszą logiką w porównaniu należy użyć =.
źródło
Jest to problem, gdy używasz strtotime z DD / MM / RRRR. Nie możesz użyć tego formatu. Zamiast tego możesz użyć MM / DD / RRRR (lub wielu innych, takich jak RRRRMMDD lub RRRR-MM-DD) i powinno działać poprawnie.
źródło
Co powiesz na uruchomienie tego zapytania i obliczenie go przez MySQL:
Wynik:
Użytkownik ma 27 lat i 6 miesięcy (liczy cały miesiąc)
źródło
Zrobiłem to w ten sposób.
źródło
Najlepsza odpowiedź na to pytanie jest w porządku, ale tylko kalorie w roku urodzenia osoby, dostosowałem ją do własnych celów, aby obliczyć dzień i miesiąc. Ale pomyślałem, że warto się tym podzielić.
Działa to na podstawie daty urodzenia użytkowników, ale możesz to zmienić
źródło
Jeśli chcesz osiągnąć pełnię wieku tylko w wieku, możesz to zrobić w bardzo prosty sposób. traktuj daty w formacie „RRRRMMDD” jako liczby i odejmuj je. Następnie anuluj część MMDD, dzieląc wynik przez 10000 i zmniejsz ją. Prosty i nigdy nie zawodzi, bierze nawet pod uwagę lata przelotowe i aktualny czas serwera;)
Od urodzenia lub przeważnie dostarczane przez pełne daty w miejscu urodzenia i są one istotne dla AKTUALNEGO CZASU LOKALNEGO (gdzie faktycznie przeprowadzana jest kontrola wieku).
więc jeśli chcesz sprawdzić, czy ktoś ma 18, 21 lub mniej niż 100 lat w Twojej strefie czasowej (nieważne źródłowej strefie czasowej) do urodzin, to jest mój sposób na zrobienie tego
źródło
Spróbuj tego :
źródło