5

日付を区切るためのコードのstrtotime()に問題があります。「/」を使用するとフォーマットはmm-dd-yyyyになり、「-」を使用するとフォーマットはdd-mm-yyyyになります。
ユーザーがpreg_macthを使用して、ユーザーが指定した天気を検証した日付を入力するときに、「/」と「-」の両方を使用しようとしています-または/これを手伝ってくれる人に感謝します。
私のコードを以下に示します

<?php
$date1=$_GET["q1"];
$date2= $_GET["q2"];
// To check date format for From date   
function checkDateFormat1($date1)
{
//match the format of the date
    if( (preg_match(" /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/", $date1,$parts)) || (preg_match(" /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/", $date1,$parts)) )
{
    //check weather the date is valid of not
    //if(checkdate($parts[2],$parts[3],$parts[1]))
    if(checkdate($parts[2],$parts[1],$parts[3]))
    return true;
    else
    return false;
}
else
return false;
}

 // To check the format for To date         
 function checkDateFormat2($date2)
{

if((preg_match(" /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/", $date2,$parts))||(preg_match(" /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/", $date2,$parts)))
{
    //check weather the date is valid of not
    //if(checkdate($parts[2],$parts[3],$parts[1]))
    if(checkdate($parts[2],$parts[1],$parts[3]))
    return true;
    else
    return false;
}
else
return false;
 }                      

if ((checkDateFormat2($date2) && checkDateFormat1($date1))==1)
{
if ($date1==$date2)
{
    $days="1";
    echo $days;
    exit;
}
else
{   
    $difference =(strtotime($date2) - strtotime($date1));
    //calculate the number of days
    $days = round(((($difference/60)/60)/24), 0);
}
 }
 else
 {
     echo "Invalid Date Format"."<br>";
echo "Please make sure that your for date format is MM-DD-YYYY";

exit;
        }

  if ($days<0)
 {
echo "From date cannot be greater than to date";

}   
else
{
$days++;
echo $days;


}   
 ?>
4

3 に答える 3

12

strToTime()が機能するはずのように機能します。PHPマニュアルから:

ノート:

m / d / yまたはdmy形式の日付は、さまざまなコンポーネント間のセパレーターを調べることで明確になります。セパレーターがスラッシュ(/)の場合、アメリカのm / d/yが想定されます。一方、区切り文字がダッシュ(-)またはドット(。)の場合、ヨーロッパのdmy形式が想定されます。

あいまいさの可能性を回避するために、可能な場合はISO 8601(YYYY-MM-DD)の日付またはDateTime :: createFromFormat()を使用することをお勧めします。

http://php.net/manual/en/function.strtotime.php

于 2012-10-04T08:09:46.187 に答える
3

標準の日付形式を見てください。このフォーマットのみがstrtotime()機能認識します。

日付が標準形式でない場合は、DateTime :: createFromFormat:を使用してください。

$d = DateTime::createFromFormat('d . Y - m', '15 . 2002 - 03');
echo $d->format('Y-m-d');
于 2012-10-04T08:11:41.783 に答える
1

PHPを使用してみてください$date = DateTime::createFromFormat('Y-m-d',$YourDateString);

于 2012-10-04T08:13:34.037 に答える