简体   繁体   English

使用Php或Javascript验证特定日期

[英]Validation of Specific Date using Php or Javascript

I need a quick way to validate in php or javascript whether a date is an invalid date such as (2/31 or 04/31 - since they dont exist), ALONG with if it is a LEAP year or not. 我需要一个快速的方法来验证PHP或javascript中的日期是否是无效的日期,如(2/31或04/31 - 因为它们不存在),如果它是LEAP年,则ALONG。

My code: 我的代码:

<?php 
$month = $_POST["mo"];
$day = $_POST["theDay"];
$yr = $_POST["year"];
if (!isset($_POST['submit'])) { // if page is not submitted; echo form
?>

<h2 style="margin:0; padding:0;">Date Selection</h2>
    <span style="color:gray; font-size:0.8em;">By Joseph Dickinson</span>
<FORM method="POST" action="<?php echo $PHP_SELF;?>">   
    <select name="mo">
      <option disabled="disabled">SELECT MONTH</option>
      <option>January</option>
      <option>February</option>
      <option>March</option>
      <option>April</option>
      <option>May</option>
      <option>June</option>
      <option>July</option>
      <option>August</option>
      <option>September</option>
      <option>October</option>
      <option>November</option>
      <option>December</option>
    </select>
    <select name="theDay">
      <option disabled="disabled">SELECT DAY</option>
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
      <option>6</option>
      <option>7</option>
      <option>8</option>
      <option>9</option>
      <option>10</option>
      <option>11</option>
      <option>12</option>
      <option>13</option>
      <option>14</option>
      <option>15</option>
      <option>16</option>
      <option>17</option>
      <option>18</option>
      <option>19</option>
      <option>20</option>
      <option>21</option>
      <option>22</option>
      <option>23</option>
      <option>24</option>
      <option>25</option>
      <option>26</option>
      <option>27</option>
      <option>28</option>
      <option>29</option>
      <option>30</option>
      <option>31</option>
    </select>

    <select name="year">
      <option disabled="disabled">SELECT YEAR</option>
      <option>2011</option>
      <option>2010</option>
      <option>2009</option>
      <option>2008</option>
      <option>2007</option>
      <option>2006</option>
      <option>2005</option>
      <option>2004</option>
      <option>2003</option>
      <option>2002</option>
      <option>2001</option>
      <option>2000</option>
      <option>1999</option>
      <option>1998</option>
      <option>1997</option>
      <option>1996</option>
      <option>1995</option>
      <option>1994</option>
      <option>1993</option>
      <option>1992</option>
      <option>1991</option>
      <option>1990</option>
      <option>1989</option>
      <option>1988</option>
      <option>1987</option>
      <option>1986</option>
      <option>1985</option>
      <option>1984</option>
      <option>1983</option>
      <option>1982</option>
      <option>1981</option>
      <option>1982</option>
    </select>
<INPUT TYPE="submit" value="Send" name="submit" />
</FORM>
<?
} else { 
echo "You chose: " . " ". $month . " ".$day . ", ". $yr;
}
?>

If someone could please help me out here. 如果有人可以帮我在这里帮忙。

First, add numbers as values for months: 首先,将数字添加为月份的值:

<select name="mo">
  <option disabled="disabled">SELECT MONTH</option>
  <option value="1">January</option>
  <option value="2">February</option>
  <option value="3">March</option>
  <option value="4">April</option>
  <option value="5">May</option>
  <option value="6">June</option>
  <option value="7">July</option>
  <option value="8">August</option>
  <option value="9">September</option>
  <option value="10">October</option>
  <option value="11">November</option>
  <option value="12">December</option>
</select>

Then use checkdate() : 然后使用checkdate()

<?php 

$month = $_POST["mo"];
$day = $_POST["theDay"];
$yr = $_POST["year"];
if (checkdate($month, $day, $yr) !== true)  {
    // ?
}

?>

And if you want to do it in the browser as well, first add an onsubmit handler to the year form: 如果你想在浏览器中也这样做,首先在年份表单中添加一个onsubmit处理程序:

<FORM method="POST" action="<?php echo $PHP_SELF;?>" onsubmit="return checkLeap(this);">

Then your function: 然后你的功能:

function checkLeap(form) {
    var month = form.mo.options[form.mo.selectedIndex].value;
    var day = form.theDay.options[form.theDay.selectedIndex].value;
    var year = form.year.options[form.year.selectedIndex].value;
    if (month == 2 && day == 29 && (new Date(year,month,year).getDate() != 29)) {
        alert('That is not a leap year. Please fix.');
        return false;
    }
    return true;
}

When you create a timestamp with mktime() with a date too high for the month, it just skips up to the next month, with a date of the difference. 当您使用mktime()创建时间戳时,该月份的日期过高,它只会跳到下个月,并带有差异日期。 For example, Feb 31 produces Mar 3. So to make sure it's valid, just create the time, and then re-check that the month hasn't changed. 例如,2月31日产生3月3日。因此,要确保它是有效的,只需创建时间,然后重新检查月份是否不变。

$month = 2;
$date = 31;
$year = 2011;
$time = mktime(1, 0, 0, $month, $date, $year);
if (date('n', $time) != $month) {
    // invalid error!
}

The same mechanism also automatically accounts for leap years. 同样的机制也会自动解释闰年。 But if you want to know if it's a leap year or not, just check with date('L', $time); 但是,如果您想知道是否是a年,只需检查一下date('L', $time); .

http://php.net/date http://php.net/date

http://php.net/mktime http://php.net/mktime

As a side note, if you do validate it with Javascript, you must also check with PHP. 作为旁注,如果您使用Javascript进行验证,则还必须使用PHP进行检查。 Never rely on client-side validation. 永远不要依赖客户端验证。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM