php 日期選取器

來源:互聯網
上載者:User

在許多表單中要輸入日期,通常的做法是給出三個下拉框,然後分別選擇年,月和日。
這裡所講的是,採用一個Text編輯框來放日期,選擇日期功能,則採用彈出一個日曆視窗,在視窗中讓使用者選擇,則Text比較框中自動把日期填上。

下面我們講講怎樣實現它。

在日期選擇的處理上,例子如下:
wnl.htm

<form name="form1" method="post" action="">
<script language="javascript">
function popupCal()
{
    var popup = window.open('wnl/wnl.php', 'popupcal', 'width=600,height=200,resizable=1,scrollbars=auto');

}
</script>
<input type="text" name="textdate" value="" readonly="true">
<input type="button" name="button" value="選擇日期" onClick="popupCal()">
</form>

在新視窗中開啟的是一個日曆視窗,關於日曆視窗,它主要是要選擇日期的Javascript如下:

<script language="javascript">
function returnDate(varDate)
{

    var strDate = "{$yyyy}-{$mm}-";
    strDate += varDate;
    window.opener.document.form1.textdate.value = strDate;
}
</script>

下面我們給出完整的日曆代碼[PHP代碼]
wnl/wnl.php

<?php
//---------------------------------------------------------------------------
// Filename   : wnl.php
// Author     : Bai Jianping<hakusan@sohu.com>
// Description : 萬年曆程式的主要邏輯功能實現部分
// Date       : 2005-03-18
// Version     : 1.0
// Copyright   : Chinux Team
//---------------------------------------------------------------------------
// History     :
//
// Date       Author         Modification
//---------------------------------------------------------------------------
// 2005-03-18   Bai Jianping   - create file
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

$YYYY_MIN = 1900;     // 最小年份
$YYYY_MAX = 2099;     // 最大年份
$YYYYMM_MIN = 190001;     // 最小月份
$YYYYMM_MAX = 209912;     // 最大月份
if (isset($_POST['yyyymm']))
{
    // 由下拉選擇框選擇的年月
    if ($_POST['yyyymm'] == "SELECTFORMAT")
    {
        $yyyymm = $_POST['selectyyyy'] * 100 + $_POST['selectmm'];
    }
    // 由點擊“本月”按鈕選擇的年月
    else if ($_POST['yyyymm'] == "THISMONTH")
    {
        $yyyymm = date("Ym");
    }
    else
    { 
        // 由點擊“上一月”選擇的年月
        if ($_POST['yyyymm'] == "LASTMM")
        {
              $_POST['yyyymm'] = $_POST['selectyyyy'] * 100 + $_POST['selectmm'] - 1;
        }
        // 由點擊“下一月”選擇的年月
        else if ($_POST['yyyymm'] == "NEXTMM")
        {
              $_POST['yyyymm'] = $_POST['selectyyyy'] * 100 + $_POST['selectmm'] + 1;
        }
        // 由點擊“上一年”選擇的年月
        else if ($_POST['yyyymm'] == "LASTYYYY")
        {
              $_POST['yyyymm'] = ($_POST['selectyyyy'] - 1) * 100 + $_POST['selectmm'];
        }
        // 由點擊“下一年”選擇的年月
        else if ($_POST['yyyymm'] == "NEXTYYYY")
        {
              $_POST['yyyymm'] = ($_POST['selectyyyy'] + 1) * 100 + $_POST['selectmm'];
        }
        
        // 限制最小與最大年月
        if ($_POST['yyyymm'] < $YYYYMM_MIN)
        {
              $yyyymm = $YYYYMM_MIN;
        }
        else if ($_POST['yyyymm'] > $YYYYMM_MAX)
        {
              $yyyymm = $YYYYMM_MAX;
        }
        else if ($_POST['yyyymm'] % 100 == 0)
        {
              $yyyymm = $_POST['yyyymm'] - 100 + 12;
        }
        else if ($_POST['yyyymm'] % 100 == 13)
        {
              $yyyymm = $_POST['yyyymm'] + 100 - 12;
        }
        else
        {
              $yyyymm = $_POST['yyyymm'];
        }
    }
}
// 如果是第一次訪問則取當天的日期
else 
{
    $yyyymm = date("Ym");
}
$yyyy = floor($yyyymm/100);     // 要顯示的年份
$mm = $yyyymm % 100;     // 要顯示的月份
$dd = date("d");     // 當天日期

// 每月的天數
$days = array(1 => 31, 2 => 28, 3 => 31, 4 => 30, 5 => 31, 6 => 30,
              7 => 31, 8 => 31, 9 => 30, 10 => 31, 11 => 30, 12 => 31);

// 判斷是否是閏年
if ($yyyy % 400 == 0 || $yyyy % 4 == 0 && $yyyy % 100 != 0)
{
    $days[2] = 29;
}
// 判斷所選年月的1號是本年第幾天
for ($i = 1, $d = 1; $i < $mm; $i++)
{
    $d += $days[$i];
}
// 取得所選月1號是星期幾
$week = (($yyyy - 1) + floor(($yyyy - 1)/4) - floor(($yyyy - 1)/100) + floor(($yyyy - 1)/400) + $d) % 7;
// 計算顯示本月日曆需要幾行
$alldays = $week + $days[$mm];
if ($alldays % 7 == 0)
{
    $rows = floor($alldays/7);
}
else 
{
    $rows = floor($alldays/7) + 1;
}

// 構造顯示月曆數組
$dayarray = array();
for ($i = 0;$i < $week; $i++)
{
    $dayarray[] = "";
}
for ($i = 1; $i < $days[$mm] + 1; $i++)
{
    $dayarray[] = $i;
}
// 加入模板
require_once("wnl.html")
?>

下面是日曆模板[採用特殊模式的模板]
wnl/wnl.html

<!--
<?php
//---------------------------------------------------------------------------
// Filename   : wnl.html
// Author     : Bai Jianping<hakusan@sohu.com>
// Description : 萬年曆程式的介面表現模板部分
// Date       : 2005-03-18
// Version     : 1.0
// Copyright   : Chinux Team
//---------------------------------------------------------------------------
// History     :
//
// Date       Author         Modification
//---------------------------------------------------------------------------
// 2005-03-18   Bai Jianping   - create file
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

$headtitle = "我的萬年曆";
$labellastyear = "上一年";
$labelnextyear = "下一年";
$labellastmonth = "上一月";
$labelnextmonth = "下一月";
$labelyear = "年";
$labelmonth = "月";
$labelthismonth = "本 月";
$labelsunday = "日";
$labelmonday = "一";
$labeltuesday = "二";
$labelwednesday = "三";
$labelthursday = "四";
$labelfriday = "五";
$labelsaturday = "六";

print <<<EOT
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>{$headtitle}</title>
<style type='text/css'>
a               { text-decoration: none; color: #003366 }
a:hover               { text-decoration: underline }
body               { scrollbar-base-color: #F1F9FE; scrollbar-arrow-color: #5AA8DA; font: 12px Tahoma, Verdana; background-color: #1A60A8;MARGIN: 0; }
table               { font: 12px Tahoma, Verdana; color: #333333; border-width:1px; border-style:solid; border-color:#6699FF }
td {FONT-SIZE: 12px; border-collapse:separate; border-width:1px; border-style:solid; border-color:#FFCCFF; text-align:center}
input,textarea     { font: 11px Tahoma, Verdana; color: #333333; font-weight: normal; background-color: #F1F9FE ;
                      border-width:1px; border-style:solid; border-color:#66CCFF}
select               { border-width:1px; border-style:solid;border-color:#66CCFF;font: 11px Arial, Tahoma; color: #333333; font-weight: normal; background-color: #F1F9FE }
div.quote{
margin:5px 20px;border:1px solid #CCCCCC;padding:5px;background:#F3F3F3 ;line-height : normal;
}
img {border:0;}
</style>
<script language="javascript">
function returnDate(varDate)
{

    var strDate = "{$yyyy}-{$mm}-";
    strDate += varDate;
    window.opener.document.form1.textdate.value = strDate;
}
</script>
</head>

<body bgcolor="#000000">
<form name="form1" method="post" action="wnl.php">
<input name="yyyymm" type="hidden" value="">
<table width="530" border="0" align="center" bgcolor="#6699FF">
<tr bgcolor="#FFFFFF">
  <td colspan="7">{$headtitle}</td>
</tr>
<tr bgcolor="#FFCCFF">
  <td><input name="year" type="button" value="{$labellastyear}" onClick="javascript:yyyymm.value='LASTYYYY';submit()"></td>
  <td><input name="year" type="button" value="{$labellastmonth}" onClick="javascript:yyyymm.value='LASTMM';submit()"></td>
  <td colspan="3">
    <select name="selectyyyy" onChange="javascript:yyyymm.value='SELECTFORMAT';submit()">
<!--
EOT;
// 輸出可選的年份
for($i = $YYYY_MIN; $i < $YYYY_MAX + 1; $i++)
{
    if ($i == $yyyy)
    {
print <<<EOT
-->
<option value="{$i}" selected>{$i}</option>
<!--
EOT;
    }
    else
    {
print <<<EOT
-->
<option value="{$i}">{$i}</option>
<!--
EOT;
    }
}
print <<<EOT
-->
    </select>
    {$labelyear}
    <select name="selectmm" onChange="javascript:yyyymm.value='SELECTFORMAT';submit()">
<!--
EOT;
// 輸出可選的月份
for($i = 1; $i < 13; $i++)
{
    if ($i == $mm)
    {
print <<<EOT
-->
        <option value="{$i}" selected>{$i}</option>
<!--
EOT;
    }
    else
    {
print <<<EOT
-->
        <option value="{$i}">{$i}</option>
<!--
EOT;
    }
}
print <<<EOT
-->
    </select>
    {$labelmonth}
  </td>
  <td><input type="button" name="Submit" value="{$labelnextmonth}" onClick="javascript:yyyymm.value='NEXTMM';submit()"></td>
  <td><input type="button" name="Submit" value="{$labelnextyear}" onClick="javascript:yyyymm.value='NEXTYYYY';submit()"></td>
</tr>
<tr bgcolor="#CCCCFF">
  <td>{$labelsunday}</td>
  <td>{$labelmonday}</td>
  <td>{$labeltuesday}</td>
  <td>{$labelwednesday}</td>
  <td>{$labelthursday}</td>
  <td>{$labelfriday}</td>
  <td>{$labelsaturday}</td>
</tr>
<!--
EOT;

$idx = 0;

// 如果要顯示的月份是本月的話,當天的日期要著重顯示
if ($yyyy == date("Y") && $mm == date("m"))
{
//     $dayarray[$week - 1 + $dd] = "<b><font color=/"#0000FF/">" . $dayarray[$week - 1 + $dd] . "</font></b>";
}
// 顯示月曆
for ($i = 0; $i < $rows; $i++)
{
print <<<EOT
-->
    <tr bgcolor="#FFFFCC">
<!--
EOT;
    // 顯示周曆
    for ($j = 0; $j < 7; $j++)
    {
print <<<EOT
-->
<td {$bgcolor} > <a href="javascript:returnDate({$dayarray[$idx]})">{$dayarray[$idx]}</a> </td>
<!--
EOT;
        $idx++;
    }
print <<<EOT
-->
    </tr>
<!--
EOT;
}
// 顯示當日日期
$today = date("D, j M Y T");
print <<<EOT
-->
<tr bgcolor="#CCCCFF">
<td colspan="6">{$today}</td>
<td><input name="today" type="button" value="{$labelthismonth}" onClick="javascript:yyyymm.value='THISMONTH';submit();"></td>
</tr>
</table>
</form>
</body>
</html>
<!--
EOT;
?>
-->

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.