Mam urodziny użytkownika przechowywane w birthday
jako 1999-02-26.PHP: Urodziny sprawdź dzisiejszą datę
Jak mogę sprawdzić, czy urodziny są dzisiaj?
if(date('m-d') == ..?
Mam urodziny użytkownika przechowywane w birthday
jako 1999-02-26.PHP: Urodziny sprawdź dzisiejszą datę
Jak mogę sprawdzić, czy urodziny są dzisiaj?
if(date('m-d') == ..?
if(date('m-d') == substr($birthday,5,5))
Aby dodać co Tim powiedział:
if(date('m-d') == substr($birthday,5,5) or (date('y')%4 <> 0 and substr($birthday,5,5)=='02-29' and date('m-d')=='02-28'))
Ta odpowiedź powinien pracy, ale to zależy od strtotime
jest w stanie zorientować się, format daty bazy danych to:
$birthDate = '1999-02-26'; // Read this from the DB instead
$time = strtotime($birthDate);
if(date('m-d') == date('m-d', $time)) {
// They're the same!
}
_Should_ nie wystarczy w tym skomplikowanym świecie. Obliczenia daty i czasu zawsze mają ukryte trudności na różnych krawędziach i wystąpieniach. Bardzo trudno jest sprawdzić urodziny dla kogoś urodzonego w dniu 29 lutego. Sprawdzanie lat przestępnych jest skomplikowane. To zasługuje na pewne gotowe rozwiązanie. – Gherman
@German No cóż, strtotime jest napisane przez osobę trzecią ... Nawiasem mówiąc, zauważyłem, że przypadkowo połączyłem się ze stroną podręcznika strptime, kiedy to pisałem ... która jest inną funkcją. Nawiasem mówiąc, ponieważ ta odpowiedź została napisana, do PHP dodano obiekty DateTime i powiązane z nimi funkcje. – Powerlord
Od PHP 5.2 w górę:
if (substr($dateFromDb, -5) === date_create()->format('m-d')) {
// Happy birthday!
}
<?php
/**
* @param string $birthday Y-m-d
* @param int $now
* @return bool
*/
function birthdayToday($birthday, $now = null) {
$birthday = substr($birthday, -5);
if ($now === null) {
$now = time();
}
$today = date('m-d', $now);
return $birthday == $today || $birthday == '02-29' && $today == '02-28' && !checkdate(2, 29, date('Y', $now));
}
Należy również umożliwić Teda urodziny 2004-02-29 - w 2011 roku będzie obchodził swoje urodziny na 02-28. –
Przyjemna myśl Tim, jak to możliwe? – Johnson
Dzięki Tim. Zmieniłem w odpowiedzi. – CristiC