我有一个字符串“date”,可以是DD.MM.YYYY或D.M.YYYY(带或不带前导零),它取决于用户输入的内容。 然后我在条件中使用它在今天发送另一封电子邮件。
if($_POST["date"]== date("d.m.Y")){
$headers.="Bcc: another@mail.cz\r\n";
}
问题是邮件是在日期格式DD.MM.YYYY(带前导零)时发送的。
我建议的解决方案
由于我在PHP方面不是很好,我理论上只知道解决方案但不知道如何编写代码 - 我会花一个星期试图自己解决。
我的想法是将日期分成三个部分(日,月,年),然后检查前两个部分是否只有一个数字,如果是这样的话,添加前导零。不过,我不知道如何实现上述条件。我已经阅读了一些关于如何做到这一点的主题,但它们与我的情况有所不同。
答案 0 :(得分:6)
您应该使用相同的格式d.m.Y
,并且可以使用strtotime
和date
函数执行此操作:
$post_date = date("d.m.Y", strtotime($_POST["date"]));
if($post_date == date("d.m.Y")){
$headers.="Bcc: another@mail.cz\r\n";
}
我将date
更改为$post_date
以获得更清晰的信息。我将尝试解释与输出的差异
echo $_POST["date"]; // lets say: 8.7.2013
echo date("d.m.Y"); // 09.09.2013 > it's current day
strtotime($_POST["date"]); // 1373230800 > it's given date with unix time
$post_date = date("d.m.Y", strtotime($_POST["date"])); // 08.07.2013 > it's given date as right format
如果使用不带参数的date
函数,则返回当前日期。
否则,如果您使用date('d.m.Y', strtotime('given_date'));
之类的参数,则会返回given date
。
$post_date = date("d.m.Y", strtotime($_POST["date"]));
首先,我们将您的日期字符串转换为带有strtotime
的unix,然后将您在if子句中使用的均衡和转换格式转换为。
答案 1 :(得分:1)
首先设置带有前导零的日期格式
$postdate = strtotime('DD.MM.YY', $_POST['date']);
并且匹配日期也将采用相同的格式
$matching_date = date('DD.MM.YY', strtotime('whatever the date'));
然后
if ( $postdate === $matching_date )
{
// send mail
}
答案 2 :(得分:0)
为什么不检查_POST的长度(可以是8或10)
if (strlen($_POST["date"]) == 10) {
$headers.="Bcc: another@mail.cz\r\n";
}