您好我正在制作一个PHP脚本,以便在客户的生日发送电子邮件,基本上我会遍历每个客户的生日,并查看今天的日期,如果匹配,则会发送一封电子邮件。虽然日期函数是给出一个随机数而不是今天的日期,但数字为:1505451600。
也许我在代码中做错了什么?有谁知道解决这个问题的方法?
$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";
}
}
}
答案 0 :(得分:3)
您需要进行2项更改才能使代码正常工作:
(1)删除此行:
$now = strtotime($now);
原因:您不想要时间戳。你想要一个格式化的日期。
(2)改变&#34; m d&#34;在这一行:
$birthdate = date('m d', strtotime($array_birthday['dt_nascimento']));
到&#34; m / d&#34;像这样:
$birthdate = date('m/d', strtotime($array_birthday['dt_nascimento']));
原因:您需要以相同的方式格式化$birthdate
和$now
以进行比较。
答案 1 :(得分: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";
}
}
}
答案 2 :(得分:0)
它给你一个数字的原因是计算机测量时间的方式是自1970年1月1日00:00(UTC(世界时))以来的秒数。
答案 3 :(得分:0)
1505451600
相当于:09/15/2017 @ 5:00am (UTC)
这是因为:
date("m/d")
返回9/15
(今天月/日)
然后strtotime尝试将此字符串转换为unix时间戳,只要年份不在字符串中,则假定当前年份(2017年)
一旦时间部分不存在,假设您的时区午夜(早上5点)
这就是为什么最后时间是1505451600