網(wǎng)上有很多漂亮的js日歷插件 拿來做一下日期的選擇方便、漂亮,但是如果要拿來做像訂票、行程表等,這些都需要將我們的數(shù)據(jù)動態(tài)的寫入日歷中,這種就需要大量的改動,所以我們用php加js生成一個能夠高度定制的日歷 .
生成日歷的代碼
namespace Org\Util;
class Calendar {
private $year;
private $month ;
private $day ;
private $weeks = array('日','一','二','三','四','五','六');
function __construct($options = array()) {
$this->year =$options['year'];
$this->month = $options['month'];
$this->day = $options['day'];
$vars = get_class_vars(get_class($this));
foreach ($options as $key=>$value) {
if (array_key_exists($key, $vars)) {
$this->$key = $value;
}
}
}
function display()
{
$list= '
';
$list.= $this->showChangeDate();
$list.= $this->showWeeks();
$list.= $this->showDays($this->year,$this->month,$this->day);
return $list;
}
private function showWeeks()//生成星期
{
$list = ' ';
foreach($this->weeks as $title)
{
$list.= '
';
}
$list.= '
';
return $list;
}
private function showDays($year, $month,$day)
{//生成日期,具體日歷的樣式可以替換生成
$firstDay = mktime(0, 0, 0, $month, 1, $year);
$starDay = date('w', $firstDay);
$days = date('t', $firstDay);
$list= '
';
for ($i=0; $i<$starDay; $i++) {
$list.= '
';
}
for ($j=1; $j<=$days; $j++) {
$i++;
$ymd = date('Y-m-d',strtotime($year.'-'.$month.'-'.$j));
$time=strtotime($year.'-'.$month.'-'.$j);
if ($j == $day) { //當(dāng)前日期下
$list.= '
';
} else { //非當(dāng)前日期下
$list.= '
';
}
if ($i % 7 == 0) {//一個星期結(jié)束
$list .='
';
}
}
$list.= '
';
return $list;
}
function showChangeDate()//點擊更換月份{
$url = basename($_SERVER['PHP_SELF']);
$list='
>
';
return $list;
}
private function preYearUrl($year,$month)
{
$year = ($this->year <= 1970) ? 1970 : $year - 1 ;
return 'year='.$year.'&month='.$month;
}
private function nextYearUrl($year,$month)
{
$year = ($year >= 2038)? 2038 : $year + 1;
return 'year='.$year.'&month='.$month;
}
private function preMonthUrl($year,$month)
{
if ($month == 1) {
$month = 12;
$year = ($year <= 1970) ? 1970 : $year - 1 ;
} else {
$month--;
}
return "'".$year."','".$month."'";//'year='.$year.'&month='.$month;
}
private function nextMonthUrl($year,$month)
{
if ($month == 12) {
$month = 1;
$year = ($year >= 2038) ? 2038 : $year + 1;
}else{
$month++;
}
return "'".$year."','".$month."'";//'year='.$year.'&month='.$month;
}
}
調(diào)用日歷
- 控制器
public function get_date(){
if(IS_AJAX){
$result['title']='success';
$params = array();
$year = I('get.year',date('Y'));
$month = I('get.month',date('m'));
$day = I('get.day',date('d'));
if ($year&& $month) {
$params = array(
'year' => $year,
'month' => $month,
'day' => $day,
);
}
$catobj = new \Org\Util\Calendar($params);
// print_r($price_list);
$result['content'] = $catobj->display();
$this->ajaxReturn($result);
}
}
前端js 生成日歷
chage_month(year,month,day);//當(dāng)前的年月日
function chage_month(year,month,day){
$.ajax({ url: "{:urlrotue('Activity/get_date')}?year="+year+"&month="+month+"&day="+day,
type: "POST",
cache: false,
data: {},
success: function (obj) {
if (obj.title == 'success') {
$('#get_date').html(obj.content);
}
else {
layer.msg(obj.msg, {icon: 5});
}
},
error: function () {
layer.msg('獲取日期失敗!', {icon: 5});
}
});
}
效果:
這個樣式比較集成,只加了跳轉(zhuǎn)時間篩選功能,我們可以在日期showDays 里面添加日期的活動,門票等,看業(yè)務(wù)需求.
如沒特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請注明來自http://m.oulysa.com/news/5115.html