使用php将事件添加到日历

时间:2019-02-08 23:58:37

标签: javascript php mysql web

我正在寻找可以帮助我将事件添加到Web日历的人。我已经使用PHP和HTML创建了日历(您可以在底部查看两个脚本)。我在数据库中也有表格,应该在其中输入这些事件。该表具有4列ID,开始日期,结束日期和类型。开始日期和结束日期应使用网络上的日历输入,并且可以将文本输入为文本。感谢您的时间!

<?php

class Calendar { 

    public function __construct(){     
        $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
    }


    private $dayLabels = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
    private $currentYear=0;
    private $currentMonth=0;
    private $currentDay=0;
    private $currentDate=null;
    private $daysInMonth=0;
    private $naviHref= null;  

    public function show() {

        $year  = null;
        $month = null;

        if(null==$year&&isset($_GET['year'])){

            $year = $_GET['year'];

        }else if(null==$year){

            $year = date("Y",time());  

        }          

        if(null==$month&&isset($_GET['month'])){

            $month = $_GET['month'];

        }else if(null==$month){

            $month = date("m",time());

        }                  

        $this->currentYear=$year;
        $this->currentMonth=$month;
        $this->daysInMonth=$this->_daysInMonth($month,$year);  
        $content='<div id="calendar">'.
                    '<div class="box">'.
                    $this->_createNavi().
                    '</div>'.
                    '<div class="box-content">'.
                        '<ul class="label">'.$this->_createLabels().'</ul>';   
                         $content.='<div class="clear"></div>';     
                         $content.='<ul class="dates">';    
                         $weeksInMonth = $this->_weeksInMonth($month,$year);

                         for( $i=0; $i<$weeksInMonth; $i++ ){

                             for($j=1;$j<=7;$j++){
                                 $content.=$this->_showDay($i*7+$j);
                             }
                         }

                         $content.='</ul>';
                         $content.='<div class="clear"></div>';
                         $content.='</div>';
                         $content.='</div>';
                         return $content;   
}


private function _showDay($cellNumber){

    if($this->currentDay==0){

        $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01'));

        if(intval($cellNumber) == intval($firstDayOfTheWeek)){

            $this->currentDay=1;

        }
    }

    if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){

        $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay)));

        $cellContent = $this->currentDay;

        $this->currentDay++;   

    }else{

        $this->currentDate =null;

        $cellContent=null;
    }


    return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')).
            ($cellContent==null?'mask':'').'">'.$cellContent.'</li>';
}


private function _createNavi(){

    $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;

    $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear;

    $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;

    $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear;

    return
        '<div class="header">'.
            '<a class="prev" href="'.$this->naviHref.'?month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Prev</a>'.
                '<span class="title">'.date('Y M',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
            '<a class="next" href="'.$this->naviHref.'?month='.sprintf("%02d", $nextMonth).'&year='.$nextYear.'">Next</a>'.
        '</div>';
}


private function _createLabels(){  

    $content='';

    foreach($this->dayLabels as $index=>$label){

        $content.='<li class="'.($label==6?'end title':'start title').' title">'.$label.'</li>';

    }

    return $content;
}




private function _weeksInMonth($month=null,$year=null){

    if( null==($year) ) {
        $year =  date("Y",time()); 
    }

    if(null==($month)) {
        $month = date("m",time());
    }


    $daysInMonths = $this->_daysInMonth($month,$year);

    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

    if($monthEndingDay<$monthStartDay){

        $numOfweeks++;

    }

    return $numOfweeks;
}


private function _daysInMonth($month=null,$year=null){

    if(null==($year))
        $year =  date("Y",time()); 

    if(null==($month))
        $month = date("m",time());

    return date('t',strtotime($year.'-'.$month.'-01'));
}

}

第二个脚本

<html>
<head>   
<title>Booker</title>
<link href="calendar.css" type="text/css" rel="stylesheet" />
</head>
<body>
<?php
include 'calendar.php';

$calendar = new Calendar();

echo $calendar->show();
?>
</body>
</html>  

1 个答案:

答案 0 :(得分:1)

您可以简单地使用此功能

<?php
class ICS {
    var $data;
    var $name;
    function ICS($start,$end,$name,$description,$location) {
        $this->name = $name;
        $this->data = "BEGIN:VCALENDAR\nVERSION:2.0\nMETHOD:PUBLISH\nBEGIN:VEVENT\nDTSTART:".date("Ymd\THis\Z",strtotime($start))."\nDTEND:".date("Ymd\THis\Z",strtotime($end))."\nLOCATION:".$location."\nTRANSP: OPAQUE\nSEQUENCE:0\nUID:\nDTSTAMP:".date("Ymd\THis\Z")."\nSUMMARY:".$name."\nDESCRIPTION:".$description."\nPRIORITY:1\nCLASS:PUBLIC\nBEGIN:VALARM\nTRIGGER:-PT10080M\nACTION:DISPLAY\nDESCRIPTION:Reminder\nEND:VALARM\nEND:VEVENT\nEND:VCALENDAR\n";
    }
    function save() {
        file_put_contents($this->name.".ics",$this->data);
    }
    function show() {
        header("Content-type:text/calendar");
        header('Content-Disposition: attachment; filename="'.$this->name.'.ics"');
        Header('Content-Length: '.strlen($this->data));
        Header('Connection: close');
        echo $this->data;
    }
}
?>