English 中文(简体)
网址显示日历
原标题:Display Calendar on php

我在搜身时,用在PHP的日历上,但我所搜索的是日期。

但是,我只想的是一份简单的日历,显示我的日期,而没有带走。

我只需要日历像正常日历如何在我们的操作系统中运作一样。

是否有办法?

最佳回答

http://keithdevens.com/software/php_calendar”rel=“noreferer” http://keithdevens.com/software/php_calendar

<?php
//http://keithdevens.com/software/php_calendar
$time = time();
$today = date( j , $time);
$days = array($today => array(null, null, <div id="today">  . $today .  </div> ));
$pn = array( &laquo;  => date( n , $time) - 1,  &raquo;  => date( n , $time) + 1);
echo generate_calendar(date( Y , $time), date( n , $time), $days, 1, null, 0);

// PHP Calendar (version 2 . 3), written by Keith Devens
// http://keithdevens . com/software/php_calendar
//  see example at http://keithdevens . com/weblog
// License: http://keithdevens . com/software/license

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array())
{
    $first_of_month = gmmktime(0, 0, 0, $month, 1, $year);
    // remember that mktime will automatically correct if invalid dates are entered
    // for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
    // this provides a built in "rounding" feature to generate_calendar()

    $day_names = array(); //generate all the day names according to the current locale
    for ($n = 0, $t = (3 + $first_day) * 86400; $n < 7; $n++, $t+=86400) //January 4, 1970 was a Sunday
        $day_names[$n] = ucfirst(gmstrftime( %A , $t)); //%A means full textual day name

    list($month, $year, $month_name, $weekday) = explode( , , gmstrftime( %m, %Y, %B, %w , $first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; //adjust for $first_day
    $title   = htmlentities(ucfirst($month_name)) . $year;  //note that some locales don t capitalize month and day names

    //Begin calendar .  Uses a real <caption> .  See http://diveintomark . org/archives/2002/07/03
    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); //previous and next links, if applicable
    if($p) $p =  <span class="calendar-prev">  . ($pl ?  <a href="  . htmlspecialchars($pl) .  ">  . $p .  </a>  : $p) .  </span>&nbsp; ;
    if($n) $n =  &nbsp;<span class="calendar-next">  . ($nl ?  <a href="  . htmlspecialchars($nl) .  ">  . $n .  </a>  : $n) .  </span> ;
    $calendar = "<div class="mini_calendar">
<table>" . "
" . 
         <caption class="calendar-month">  . $p . ($month_href ?  <a href="  . htmlspecialchars($month_href) .  ">  . $title .  </a>  : $title) . $n . "</caption>
<tr>";

    if($day_name_length)
    {   //if the day names should be shown ($day_name_length > 0)
        //if day_name_length is >3, the full name of the day will be printed
        foreach($day_names as $d)
            $calendar  .=  <th abbr="  . htmlentities($d) .  ">  . htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d) .  </th> ;
        $calendar  .= "</tr>
<tr>";
    }

    if($weekday > 0) 
    {
        for ($i = 0; $i < $weekday; $i++) 
        {
            $calendar  .=  <td>&nbsp;</td> ; //initial  empty  days
        }
    }
    for($day = 1, $days_in_month = gmdate( t ,$first_of_month); $day <= $days_in_month; $day++, $weekday++)
    {
        if($weekday == 7)
        {
            $weekday   = 0; //start a new week
            $calendar  .= "</tr>
<tr>";
        }
        if(isset($days[$day]) and is_array($days[$day]))
        {
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar  .=  <td  . ($classes ?   class="  . htmlspecialchars($classes) .  ">  :  > ) . 
                ($link ?  <a href="  . htmlspecialchars($link) .  ">  . $content .  </a>  : $content) .  </td> ;
        }
        else $calendar  .= "<td>$day</td>";
    }
    if($weekday != 7) $calendar  .=  <td id="emptydays" colspan="  . (7-$weekday) .  ">&nbsp;</td> ; //remaining "empty" days

    return $calendar . "</tr>
</table>
</div>
";
}
?>

它是一个基本微型日历。 无租赁职能。

问题回答

我只用PHP5 + ajax(如果需要的话)写了:

<?php

class PN_Calendar {

    public $first_day_of_week = 0; //0 - sunday, 1 - monday
    public $current_year = null;
    public $current_month = null;
    public $current_day = null;
    public $show_year_selector = true;
    public $min_select_year = 1991;
    public $max_select_year = 2045;
    public $show_month_selector = true;

    public function __construct($atts = array()) {
        if (isset($atts[ first_day_of_week ])) {
            $this->first_day_of_week = $atts[ first_day_of_week ];
        }

        if (!isset($atts[ year ])) {
            $this->current_year = date( Y );
        } else {
            $this->current_year = $atts[ year ];
        }

        if (!isset($atts[ month ])) {
            $this->current_month = date( m );
        } else {
            $this->current_month = $atts[ month ];
        }

        if (!isset($atts[ day ])) {
            $this->current_day = date( d );
        } else {
            $this->current_day = $atts[ day ];
        }
        //***
        if (isset($atts[ show_year_selector ])) {
            $this->show_year_selector = $atts[ show_year_selector ];
        }

        if (isset($atts[ show_month_selector ])) {
            $this->show_month_selector = $atts[ show_month_selector ];
        }

        if (isset($atts[ min_select_year ])) {
            $this->min_select_year = $atts[ min_select_year ];
        }

        if (isset($atts[ max_select_year ])) {
            $this->max_select_year = $atts[ max_select_year ];
        }
    }

    /*
     * Month calendar drawing
     */

    public function draw($data = array(), $y = 0, $m = 0) {
        //***
        if ($m == 0 AND $m == 0) {
            $y = $this->current_year;
            $m = $this->current_month;
        }
        //***
        $data[ week_days_names ] = $this->get_week_days_names(true);
        $data[ cells ] = $this->generate_calendar_cells($y, $m);
        $data[ month_name ] = $this->get_month_name($m);
        $data[ year ] = $y;
        $data[ month ] = $m;
        return $this->draw_html( calendar , $data);
    }

    private function generate_calendar_cells($y, $m) {
        $y = intval($y);
        $m = intval($m);
        //***
        $first_week_day_in_month = date( w , mktime(0, 0, 0, $m, 1, $y)); //from 0 (sunday) to 6 (saturday)
        $days_count = $this->get_days_count_in_month($y, $m);
        $cells = array();
        //***
        if ($this->first_day_of_week == $first_week_day_in_month) {
            for ($d = 1; $d <= $days_count; $d++) {
                $cells[] = new PN_CalendarCell($y, $m, $d);
            }
            //***
            $cal_cells_left = 5 * 7 - $days_count;
            $next_month_data = $this->get_next_month($y, $m);
            for ($d = 1; $d <= $cal_cells_left; $d++) {
                $cells[] = new PN_CalendarCell($next_month_data[ y ], $next_month_data[ m ], $d, false);
            }
        } else {
            //***
            if ($this->first_day_of_week == 0) {
                $cal_cells_prev = 6 - (7 - $first_week_day_in_month); //checked, is right
            } else {
                if ($first_week_day_in_month == 1) {
                    $cal_cells_prev = 0;
                } else {
                    if ($first_week_day_in_month == 0) {
                        $cal_cells_prev = 6 - 1;
                    } else {
                        $cal_cells_prev = 6 - (7 - $first_week_day_in_month) - 1;
                    }
                }
            }
            //***
            $prev_month_data = $this->get_prev_month($y, $m);
            $prev_month_days_count = $this->get_days_count_in_month($prev_month_data[ y ], $prev_month_data[ m ]);

            for ($d = $prev_month_days_count - $cal_cells_prev; $d <= $prev_month_days_count; $d++) {
                $cells[] = new PN_CalendarCell($prev_month_data[ y ], $prev_month_data[ m ], $d, false);
            }

            //***
            for ($d = 1; $d <= $days_count; $d++) {
                $cells[] = new PN_CalendarCell($y, $m, $d);
            }
            //***
            //35(7*5) or 42(7*6) cells
            $busy_cells = $cal_cells_prev + $days_count;
            $cal_cells_left = 0;
            if ($busy_cells < 35) {
                $cal_cells_left = 35 - $busy_cells - 1;
            } else {
                $cal_cells_left = 42 - $busy_cells - 1;
            }
            //***
            if ($cal_cells_left > 0) {
                $next_month_data = $this->get_next_month($y, $m);
                for ($d = 1; $d <= $cal_cells_left; $d++) {
                    $cells[] = new PN_CalendarCell($next_month_data[ y ], $next_month_data[ m ], $d, false);
                }
            }
        }
        //***
        return $cells;
    }

    public function get_next_month($y, $m) {
        $y = intval($y);
        $m = intval($m);

        //***
        $m++;
        if ($m % 13 == 0 OR $m > 12) {
            $y++;
            $m = 1;
        }

        return array( y  => $y,  m  => $m);
    }

    public function get_prev_month($y, $m) {
        $y = intval($y);
        $m = intval($m);

        //***
        $m--;
        if ($m <= 0) {
            $y--;
            $m = 12;
        }

        return array( y  => $y,  m  => $m);
    }

    public function get_days_count_in_month($year, $month) {
        return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
    }

    public static function get_month_name($m) {
        $names = self::get_monthes_names();
        return $names[intval($m)];
    }

    public function get_week_day_name($num, $shortly = false) {
        $names = $this->get_week_days_names($shortly);
        return $names[intval($num)];
    }

    public function get_week_days_names($shortly = false) {
        if ($this->first_day_of_week == 1) {
            if ($shortly) {
                return array(
                    1 =>  Mo ,
                    2 =>  Tu ,
                    3 =>  We ,
                    4 =>  Th ,
                    5 =>  Fr ,
                    6 =>  Sa ,
                    7 =>  Su 
                );
            }

            return array(
                1 =>  Monday ,
                2 =>  Tuesday ,
                3 =>  Wednesday ,
                4 =>  Thursday ,
                5 =>  Friday ,
                6 =>  Saturday ,
                7 =>  Sunday 
            );
        } else {
            if ($shortly) {
                return array(
                    0 =>  Su ,
                    1 =>  Mo ,
                    2 =>  Tu ,
                    3 =>  We ,
                    4 =>  Th ,
                    5 =>  Fr ,
                    6 =>  Sa 
                );
            }

            return array(
                0 =>  Sunday ,
                1 =>  Monday ,
                2 =>  Tuesday ,
                3 =>  Wednesday ,
                4 =>  Thursday ,
                5 =>  Friday ,
                6 =>  Saturday 
            );
        }
    }

    public static function get_monthes_names() {
        return array(
            1 =>  January ,
            2 =>  February ,
            3 =>  March ,
            4 =>  April ,
            5 =>  May ,
            6 =>  June ,
            7 =>  July ,
            8 =>  August ,
            9 =>  September ,
            10 =>  October ,
            11 =>  November ,
            12 =>  December 
        );
    }

    public function draw_html($view, $data = array()) {
        @extract($data);
        ob_start();
        include( views/  . $view .  .php  );
        return ob_get_clean();
    }

    }


class PN_CalendarCell {

    public $cell_year = null;
    public $cell_month = null;
    public $cell_day = null;
    public $in_current_month = true;

    public function __construct($y, $m, $d, $in_current_month = true) {
        $this->cell_year = $y;
        $this->cell_month = $m;
        $this->cell_day = $d;
        $this->in_current_month = $in_current_month;
    }

    public function get_week_day_num() {
        return date( w , mktime(0, 0, 0, $this->cell_month, $this->cell_day, $this->cell_year)); //from 0 (sunday) to 6 (saturday);
    }

    public function draw($events) {
        $this_day_events = 0;
        if (is_array($events)) {
            if (isset($events[$this->cell_year][$this->cell_month][$this->cell_day])) {
                $this_day_events = count($events[$this->cell_year][$this->cell_month][$this->cell_day]);
            }
        } else {
            $events = array();
        }
        ?>

        <span class="pn_cal_cell_ev_counter" <?php if ($this_day_events <= 0): ?>style="display: none;"<?php endif; ?>><?php echo $this_day_events ?></span>
        <a data-year="<?php echo $this->cell_year ?>" data-month="<?php echo $this->cell_month ?>" data-day="<?php echo $this->cell_day ?>" data-week-day-num="<?php echo $this->get_week_day_num() ?>" href="javascript:void(0);" class="<?php if ($this->in_current_month): ?>pn_this_month<?php else: ?>other_month<?php endif; ?>"><?php echo $this->cell_day ?></a>
    }

}

原文:

<?php
   include_once  classes/calendar.php ;
   $calendar = new PN_Calendar();
   echo $calendar->draw();
?>

Download script with demo: http://pluginus.net/archives/simple-free-open-source-ajax-php-calendar-script

Demo: http://demo.pluginus.net/calendar/

我也在寻求一个简单的解决方案,一个PHP级使我成为每月日历,我可以很容易地增加事件。

I ve found this PHP Calendar http://coreyworrell.com/calendar/

您仍须在html上形成一种观点/榜样,但你可以找到一种可以使用的CSS和超文本。

它还在公共卫生和公共卫生部有习俗。

$event = $calendar->event()
  ->condition( timestamp , strtotime( January 2, 2010 ))
  ->title( Hello All )
  ->output( My Custom Event )
  ->add_class( custom-event-class );




相关问题
CSS working only in Firefox

I am trying to create a search text-field like on the Apple website. The HTML looks like this: <div class="frm-search"> <div> <input class="btn" type="image" src="http://www....

image changed but appears the same in browser

I m writing a php script to crop an image. The script overwrites the old image with the new one, but when I reload the page (which is supposed to pickup the new image) I still see the old one. ...

Firefox background image horizontal centering oddity

I am building some basic HTML code for a CMS. One of the page-related options in the CMS is "background image" and "stretch page width / height to background image width / height." so that with large ...

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签