在PHP中将前导零添加到字符串日期

时间:2013-09-09 06:38:43

标签: php

我有一个字符串“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方面不是很好,我理论上只知道解决方案但不知道如何编写代码 - 我会花一个星期试图自己解决。

我的想法是将日期分成三个部分(日,月,年),然后检查前两个部分是否只有一个数字,如果是这样的话,添加前导零。不过,我不知道如何实现上述条件。我已经阅读了一些关于如何做到这一点的主题,但它们与我的情况有所不同。

3 个答案:

答案 0 :(得分:6)

您应该使用相同的格式d.m.Y,并且可以使用strtotimedate函数执行此操作:

$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";
}