PHP日期函数给出一个随机数

时间:2017-09-15 19:31:15

标签: php

您好我正在制作一个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";
        }
    }
}

4 个答案:

答案 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