【问题标题】:CheckDate Function Adds a Month When InvalidCheckDate 函数在无效时添加月份
【发布时间】:2014-04-06 03:13:46
【问题描述】:

我正在根据日期确定星期几。我添加了一个数组来打印实际月份而不是月份的数字。它适用于正确的日期。但是当我查找无效日期时,checkdate 函数可以工作,但是在显示无效日期时它会将月份上移一个。我知道它与monthName 有关,因为当我将其保留为月份编号($month)时,它可以正常工作。任何想法为什么?

<?Php
error_reporting(E_ALL ^ E_NOTICE);
$todo=$_POST['todo'];

if(isset($todo) and $todo=="submit")
    {
      $month=$_POST['month'];
      $dt=$_POST['dt'];
      $year=$_POST['year'];
      $timestamp = mktime(0, 0, 0, "$month", "$dt", "$year");
      $monthName = date("F", $timestamp);

        if (checkdate($month, $dt, $year)) 
            {
            "<br>";
            echo "$monthName $dt, $year was (or will be) on a " . \date("l", mktime(0, 0, 0, "$month", "$dt", "$year")) . "<br>";
            } 

        else 
            {
            echo $error = "The date $monthName $dt, $year is invalid";
            }
      }
?>

<h2>Enter a Date and I'll Tell You the Day of the Week</h2>

<form method=post name=f1 action=''><input type=hidden name='todo' value="submit">
<table border="0" cellspacing="0" >
<tr><td  align=left>   
Month <select name=month value=''>Select Month</option>
<option value='01'>January</option>
<option value='02'>February</option>
<option value='03'>March</option>
<option value='04'>April</option>
<option value='05'>May</option>...

【问题讨论】:

    标签: php validation date if-statement


    【解决方案1】:

    如果您传递了无效日期,那么我猜 mktime 会根据您传递的无效日期生成 $month + 1 的时间戳。例如,2 月 30 日将转换为 3 月 1 日。

    Proof

    就我个人而言,我会放弃 mktime 并为此使用 DateTime。类似的东西:-

    $month=2;
    $dt=30;
    $year=2014;
    
    if(!checkdate($month, $dt, $year)){
        echo "$dt " . \DateTime::createFromFormat('m', $month)->format('F') . " $year is not a valid date";
    } else {
        $date = \DateTime::createFromFormat('d m Y', "$dt $month $year");
        echo $date->format('jS F Y') . " will be a " . $date->format('l');
    }
    

    See it working

    【讨论】:

    • 我想我可以在 else 语句中重新定义 $monthName 。但是还有其他解决方法吗?
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多