1

我有一个字符串“日期”,它可以是 DD.MM.YYYY 或 DMYYYY(带或不带前导零),这取决于用户键入的内容。然后我在今天的情况下使用它来发送另一封电子邮件。

if($_POST["date"]== date("d.m.Y")){ 
  $headers.="Bcc: another@mail.cz\r\n";
}

问题是邮件仅在日期格式 DD.MM.YYYY(带前导零)时发送。

我提出的解决方案

由于我在 PHP 方面不是很好,我只知道理论上的解决方案,但不知道如何编写代码 - 我会花一个星期试图自己弄清楚。

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

4

3 回答 3

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不带参数的函数,它将作为当前日期返回。

否则,如果您使用 with param like date('d.m.Y', strtotime('given_date'));,它会返回 as given date

$post_date = date("d.m.Y", strtotime($_POST["date"]));

首先,我们将您的日期字符串转换为 unix,strtotime然后使用您在 if 子句中使用的均衡和转换格式。

于 2013-09-09T06:41:50.067 回答
1

首个带前导零的日期格式

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

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

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

然后

if ( $postdate === $matching_date )
{
  // send mail
}
于 2013-09-09T06:51:21.510 回答
0

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

if (strlen($_POST["date"]) == 10) {
   $headers.="Bcc: another@mail.cz\r\n";
}
于 2013-09-09T06:44:58.410 回答