【php 日期选择器】在许多表单中要输入日期,通常的做法是给出三个下拉框,然后分别选择年,月和日。
这里所讲的是,采用一个Text编辑框来放日期,选择日期功能,则采用弹出一个日历窗口,在窗口中让用户选择,则Text比较框中自动把日期填上。
下面我们讲讲怎样实现它。
在日期选择的处理上,例子如下:
wnl.htm
在新窗口中打开的是一个日历窗口,关于日历窗口,它主要是要选择日期的Javascript如下:
下面我们给出完整的日历代码[PHP代码]
wnl/wnl.php
//--------------------------------------------------------------------------- // Filename: wnl.php // Author: Bai Jianping // Description : 万年历程序的主要逻辑功能实现部分 // Date: 2005-03-18 // Version: 1.0 // Copyright: Chinux Team //--------------------------------------------------------------------------- // History: // // DateAuthorModification //--------------------------------------------------------------------------- // 2005-03-18Bai 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
{$headtitle} - 锐客网
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;
}
|
|
推荐阅读