2017-09-15 61 views
0

你好我正在做一個PHP腳本來發送一個客戶的生日的電子郵件,基本上我循環通過每個客戶的生日和檢查今天的日期,如果他們匹配,一封電子郵件發送。雖然日期函數給出了一個隨機數而不是今天的日期,但數字是:1505451600.給出一個隨機數的PHP日期函數

也許我在代碼中做錯了什麼?有誰知道解決這個問題的方法嗎?

$get_birthday = $DB_con->prepare("SELECT email, dt_nascimento FROM clientes"); 
if ($get_birthday->execute()) { 
    while ($array_birthday = $get_birthday->fetch(PDO::FETCH_ASSOC)) { 
     $birthdate = date('m d', strtotime($array_birthday['dt_nascimento'])); 
     // echo "</br> data:".$array_birthday['dt_nascimento']; 
     // echo "</br>".$birthdate; 
     $now = date("m/d"); 
     $now = strtotime($now); 
     // echo "</br>now: ".$now; 
     $email = $array_birthday['email']; 
     if ($now == $birthdate) { 
      include"PHPMailer/email_birthday.php"; 
     } 
    } 
} 
+2

1505451600相當於:09/15/2017 @ 5:00 am(UTC) –

+0

那麼它爲什麼會給出這個數字而不是僅僅是日月? – Henrique

+0

'strtotime'給你一個通過日期的時間戳。你能指望什麼? –

回答

3

有您需要爲您的代碼2點的變化工作:

(1)刪除此行:

$now = strtotime($now); 

原因:你不想時間戳。你想要一個格式化的日期。

(2)在此行更改 「MD」:

$birthdate = date('m d', strtotime($array_birthday['dt_nascimento'])); 

爲 「M/d」,例如:

$birthdate = date('m/d', strtotime($array_birthday['dt_nascimento'])); 

原因:您需要格式化$birthdate$now以同樣的方式做比較工作。

0

它給你一個數字的原因是計算機如何測量時間是從1/1/1970 00:00(UTC(世界時))以來的秒數。

1

我將$ now轉換爲timestamp並將$ birthdate格式更改爲與$ now相同。 這是工作代碼:

$get_birthday = $DB_con->prepare("SELECT email, dt_nascimento FROM clientes"); 
if ($get_birthday->execute()) { 
    while ($array_birthday = $get_birthday->fetch(PDO::FETCH_ASSOC)) { 
     $birthdate = date('m d', strtotime($array_birthday['dt_nascimento'])); 
     // echo "</br> data:".$array_birthday['dt_nascimento']; 
     // echo "</br>".$birthdate; 
     $now = date("m d"); 
     // echo "</br>now: ".$now; 
     $email = $array_birthday['email']; 
     if ($now == $birthdate) { 
      include"PHPMailer/email_birthday.php"; 
     } 
    } 
} 
+1

雖然你的解決方法是正確的,但比較''m/d''格式和''格式''格式只會使__never__爲真。 –

+0

@u_muler你是對的!我修正了日期格式。 –

0

1505451600等同於:09/15/2017 @ 5:00am (UTC)

出現這種情況的原因是:

date("m/d")回報9/15(今月/日)

然後strtotime嘗試轉換將此字符串轉換爲unix時間戳,只要年份不在字符串中,則假定當前年(2017)爲

只要時間部分是不存在的,半夜在你的時區,假定(上午05點UTC)

這是爲什麼最後時刻1505451600