1

DD.MM.YYYY または DMYYYY (先行ゼロの有無にかかわらず) の文字列「日付」があります。ユーザーの入力内容によって異なります。そして、今日になったらまたメールを送るという条件で使っています。

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

問題は、日付形式が DD.MM.YYYY (先行ゼロ付き) の場合にのみメールが送信されることです。

私の提案する解決策

私は PHP があまり得意ではないので、解決策を理論的にしか知りませんが、コードの書き方は知りません。自分で解決策を見つけようとして 1 週間を費やします。

私が考えているのは、日付を 3 つの部分 (日、月、年) に分割し、最初の 2 つの部分が 1 桁しかない場合はチェックし、その場合は先行ゼロを追加することです。ただし、それを上記の条件に実装する方法がわかりません。これを行う方法についていくつかのトピックを読みましたが、それらは私の場合とは少し異なりました。

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すると、現在の日付として返されます。

それ以外の場合、 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 に答える