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


Adding leading zeroes to a string date in 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,所以我只知道理论上的解决方案,而不知道如何编写代码 - 我会花一周的时间试图自己弄清楚。

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

你应该

均衡到相同的格式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 子句中使用的格式。

第一个设置日期格式,前导零

$postdate = strtotime('DD.MM.YY', $_POST['date']);

并且匹配日期将采用相同的格式

$matching_date = date('DD.MM.YY', strtotime('whatever the date'));

然后

if ( $postdate === $matching_date )
{
  // send mail
}

你为什么不检查_POST的长度(可以是 8 或 10)

if (strlen($_POST["date"]) == 10) {
   $headers.="Bcc: another@mail.cz'r'n";
}