目次
PHP 自制日历

PHP 自制日历

Jun 13, 2016 am 09:24 AM
カレンダー

PHP 自制日历

一、计算数据

 

 

 

1、new一个Calendar类

 

2、初始化两个下拉框中的数据,年份与月份

 

3、初始化要搜索的年份和月份

 

4、计算得出日历中每一天的数据信息,包括css、天数

 

复制代码

    require_once 'calendar.php';

    $util = new Calendar();

    $years = array(2012, 2013, 2014, 2015, 2016);//年份选择自定义

    $months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);//月份数组

    //获取post的年份数据

    if(empty($_POST['ddlYear'])) {

        $year = date('Y');

    }else {

        $year = $_POST['ddlYear'];

    }

    //获取post的月份数据

    if(empty($_POST['ddlMonth'])) {

        $month = date('n');

    }else {

        $month = $_POST['ddlMonth'];

    }

 

    $calendar = $util->threshold($year, $month);//获取各个边界值

    $caculate = $util->caculate($calendar);//计算日历的天数与样式

    $draws = $util->draw($caculate);//画表格,设置table中的tr与td

?>

复制代码

 

 

二、html展示

 

 

 

1、休息天的背景色是不同的,不是当前搜索年月的天数字体颜色也是不同的

 

2、div中做初始化年份与月份的下拉框的操作,并选中当前要搜索的年月

 

3、数据已计算好,哪个td属于哪个tr也已做好,直接将table打印出来即可

 

复制代码

  

       

       

           

       

       

       

       

           

       

       

       

   

   

       

               

                   

                   

                   

                   

                   

                   

                   

               

       

       

           

               

               

                   

                   

               

           

       

   

                       

                   

复制代码

 

 

三、Calendar类

 

 

 

1、threshold方法,生成日历的各个边界值

 

  1)计算这个月总天数

 

  2)计算这个月第一天与最后一天,各是星期几

 

  3)计算日历中的第一个日期与最后一个日期

 

复制代码

  /**

     * @deprecated 生成日历的各个边界值

     * @param string $year

     * @param string $month

     * @return array

     */

    function threshold($year, $month) {

        $firstDay = mktime(0, 0, 0, $month, 1, $year);

        $lastDay = strtotime('+1 month -1 day', $firstDay);

        //取得天数  

        $days = date("t", $firstDay);

        //取得第一天是星期几

        $firstDayOfWeek = date("N", $firstDay);

        //获得最后一天是星期几

        $lastDayOfWeek = date('N', $lastDay);

        

        //上一个月最后一天

        $lastMonthDate = strtotime('-1 day', $firstDay);

        $lastMonthOfLastDay = date('d', $lastMonthDate);

        //下一个月第一天

        $nextMonthDate = strtotime('+1 day', $lastDay);

        $nextMonthOfFirstDay = strtotime('+1 day', $lastDay);

        

        //日历的第一个日期

        if($firstDayOfWeek == 7)

            $firstDate = $firstDay;

        else 

            $firstDate = strtotime('-'. $firstDayOfWeek .' day', $firstDay);

        //日历的最后一个日期

        if($lastDayOfWeek == 6)

            $lastDate = $lastDay;

        elseif($lastDayOfWeek == 7)    

            $lastDate = strtotime('+6 day', $lastDay);

        else

            $lastDate = strtotime('+'.(6-$lastDayOfWeek).' day', $lastDay);

        

        return array(

                'days' => $days, 

                'firstDayOfWeek' => $firstDayOfWeek, 

                'lastDayOfWeek' => $lastDayOfWeek,

                'lastMonthOfLastDay' => $lastMonthOfLastDay,

                'firstDate' => $firstDate,

                'lastDate' => $lastDate,

                'year' => $year,

                'month' => $month

        );

    }

复制代码

 

 

2、caculate方法,计算日历的天数与样式

 

  1)将上个月的天数计算出来,本月第一天的星期不是星期天的话,就需要根据上个月的最后一天计算

 

  2)将本月的天数遍历出来,如果是休息天就加上特殊的css样式

 

  3)将下个月的天数计算出来,分三种情况,星期日、星期六和工作日

 

复制代码

  /**

     * @author Pwstrick

   * @param array $calendar 通过threshold方法计算后的数据

     * @deprecated 计算日历的天数与样式

     */

    function caculate($calendar) {

        $days = $calendar['days'];

        $firstDayOfWeek = $calendar['firstDayOfWeek'];//本月第一天的星期

        $lastDayOfWeek = $calendar['lastDayOfWeek'];//本月最后一天的星期

        $lastMonthOfLastDay = $calendar['lastMonthOfLastDay'];//上个月的最后一天

        $year = $calendar['year'];

        $month = $calendar['month'];

        

        $dates = array();

        if($firstDayOfWeek != 7) {

            $lastDays = array();

            $current = $lastMonthOfLastDay;//上个月的最后一天

            for ($i = 0; $i

                array_push($lastDays, $current);//添加上一个月的日期天数

                $current--;

            }

            $lastDays = array_reverse($lastDays);//反序

            foreach ($lastDays as $index => $day) {

                array_push($dates, array('day' => $day, 'tdclass' => ($index ==0 ?'rest':''), 'pclass' => 'outter'));

            }

        }

        

        //本月日历信息

        for ($i = 1; $i

            $isRest = $this->_checkIsRest($year, $month, $i);

            //判断是否是休息天

            array_push($dates, array('day' => $i, 'tdclass' => ($isRest ?'rest':''), 'pclass' => ''));

        }

        

        //下月日历信息

        if($lastDayOfWeek == 7) {//最后一天是星期日

            $length = 6;

        }

        elseif($lastDayOfWeek == 6) {//最后一天是星期六

            $length = 0;

        }else {

            $length = 6 - $lastDayOfWeek;

        }

        for ($i = 1; $i

            array_push($dates, array('day' => $i, 'tdclass' => ($i==$length ?'rest':''), 'pclass' => 'outter'));

        }

        

        return $dates;

    }

复制代码

 

 

3、draw方法,画表格,设置table中的tr与td

 

  1)数据将要用table标签来显示,所以这里要将各个tr下面的td排列好

 

  2)$index % 7 == 0 计算表格每行的第一列

 

  3)$index % 7 == 6 || $index == ($length-1) 计算每行的最后一列,或$caculate的最后一个数据

 

  4)将中间行添加到$tr中,就是每一行的array

 

复制代码

  /**

     * @author Pwstrick

     * @param array $caculate 通过caculate方法计算后的数据

     * @deprecated 画表格,设置table中的tr与td

     */

    function draw($caculate) {

        $tr = array();

        $length = count($caculate);

        $result = array();

        foreach ($caculate as $index => $date) {

            if($index % 7 == 0) {//第一列

                $tr = array($date);

            }elseif($index % 7 == 6 || $index == ($length-1)) {

                array_push($tr, $date);

                array_push($result, $tr);//添加到返回的数据中

                $tr = array();//清空数组列表

            }else {

                array_push($tr, $date);

            }

        }

        return $result;

    }

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

win11の二画面カレンダーがセカンドモニターに存在しない場合はどうすればよいですか? win11の二画面カレンダーがセカンドモニターに存在しない場合はどうすればよいですか? Jun 12, 2024 pm 05:47 PM

Windows 11 で毎日の仕事やルーチンを整理するための重要なツールは、タスク バーの時刻と日付の表示です。この機能は通常、画面の右下隅にあり、時刻と日付に即座にアクセスできます。この領域をクリックするとカレンダーが表示され、別のアプリを開かなくても今後の予定や日付を簡単に確認できます。ただし、複数のモニターを使用している場合は、この機能で問題が発生する可能性があります。具体的には、接続されているすべてのモニターのタスクバーに時計と日付が表示されますが、2 番目のモニターで日付と時刻をクリックしてカレンダーを表示する機能は利用できません。現時点では、この機能はメイン ディスプレイでのみ機能します。Windows 10 とは異なり、任意のディスプレイをクリックすると機能します。

Win10のカレンダーには週番号が表示される Win10のカレンダーには週番号が表示される Jan 04, 2024 am 08:41 AM

多くのユーザーは、Win10 カレンダー ツールを使用して現在の日数を確認したいと考えていますが、カレンダーにはこの機能が自動的に表示されません。実際には、簡単な設定を行うだけで、今年の累積週数が表示されます ~ Win10 カレンダー表示週 デジタル設定チュートリアル: 1. デスクトップの左下隅にある検索にカレンダーと入力し、アプリケーションを開きます。 2. 開いたカレンダー アプリケーションで、左下隅の「歯車」アイコンをクリックすると、右側に設定がポップアップ表示されます。「カレンダー設定」をクリックします。 3. 開いたカレンダー設定で続行し、「週番号」を見つけます。そして週を変更します。数値オプションを「年の最初の日」に調整するだけです。 4. 上記の設定が完了したら、「週」をクリックすると、今年の週番号の統計が表示されます。

Outlook カレンダーが同期していません。 Outlook カレンダーが同期していません。 Mar 26, 2024 am 09:36 AM

Outlook カレンダーが Google カレンダー、Teams、iPhone、Android、Zoom、Office アカウントなどと同期できない場合は、次の手順に従って問題を解決してください。カレンダー アプリは、Google カレンダー、iPhone、Android、Microsoft Office 365 などの他のカレンダー サービスと接続でき、自動的に同期できるので非常に便利です。しかし、OutlookCalendar がサードパーティの予定表と同期できない場合はどうすればよいでしょうか? 考えられる理由としては、同期に間違った予定表を選択した、予定表が表示されない、バックグラウンド アプリケーションの干渉、古い Outlook アプリケーションまたは予定表アプリケーションなどが考えられます。 Outlook カレンダーが同期しない場合の暫定的な修正

win10で右下のカレンダーが開けません win10で右下のカレンダーが開けません Dec 26, 2023 pm 05:07 PM

win0 システムを使用している友人の中には、win10 カレンダーが開けないという状況に遭遇した人もいます。これは単なるコンピュータの通常の不具合です。win10 システムのプライバシー設定で解決できます。今日、編集者が詳細な解決策を提供しました。以下、見てみましょう。 win10の右下でカレンダーが開けない問題の解決策 1. win10システムで「スタート」をクリック → 上のプログラムリストボタンをクリック → ピンイン(中国語) Rを検索 → カレンダー 2. 初めて使用する場合, 新しいイベントが開かない場合があります (マウスを傾けると紺色が選択されなくなります), プライバシーに設定できます。デスクトップの左上隅にある 3 本のバーのアイコンをクリックすると、下部に設定メニューが表示されます; 3. ポップアップ インターフェイスで [プライバシー] をクリックします; 4. 以前に設定を使用したことがある場合は、左

Outlook がカレンダーにイベントを自動的に追加しないようにする方法 Outlook がカレンダーにイベントを自動的に追加しないようにする方法 Feb 26, 2024 am 09:49 AM

電子メール マネージャー アプリケーションとして、Microsoft Outlook を使用すると、イベントや予定をスケジュールできます。 Outlook アプリケーションでこれらのアクティビティ (イベントとも呼ばれます) を作成、管理、追跡するためのツールを提供することで、組織的な状態を維持できるようになります。ただし、Outlook の予定表に不要なイベントが追加される場合があり、ユーザーが混乱したり、予定表にスパムが送信されたりすることがあります。この記事では、Outlook が予定表にイベントを自動的に追加しないようにするために役立つさまざまなシナリオと手順を説明します。 Outlook イベント – 簡単な概要 Outlook イベントには複数の目的があり、次のような多くの便利な機能があります。 カレンダーの統合: Outlook 内

Win10 でカレンダー イベントのポップアップ リマインダーが表示されない場合はどうすればよいですか? Win10 でカレンダー イベントのリマインダーが表示されなくなった場合はどうすればよいですか? Win10 でカレンダー イベントのポップアップ リマインダーが表示されない場合はどうすればよいですか? Win10 でカレンダー イベントのリマインダーが表示されなくなった場合はどうすればよいですか? Jun 09, 2024 pm 02:52 PM

カレンダーは、ユーザーがスケジュールを記録したり、リマインダーを設定したりするのに役立ちますが、多くのユーザーは、Windows 10 でカレンダー イベントのリマインダーが表示されない場合はどうすればよいかを尋ねています。ユーザーはまず Windows の更新ステータスを確認するか、Windows App Store のキャッシュをクリアして操作を実行できます。このサイトでは、Win10 カレンダーのイベントリマインダーが表示されない問題の分析をユーザーに丁寧に紹介します。カレンダーイベントを追加するには、システムメニューの「カレンダー」プログラムをクリックします。カレンダー内の日付をマウスの左ボタンでクリックします。編集画面でイベント名とリマインダー時刻を入力し、「保存」ボタンをクリックするとイベントが追加されます。 Win10のカレンダーイベントリマインダーが表示されない問題を解決する

win11の時間が常に不正確である問題を解決するにはどうすればよいですか? Win11 時間調整チュートリアルは、不正確な時間の問題をすぐに解決します win11の時間が常に不正確である問題を解決するにはどうすればよいですか? Win11 時間調整チュートリアルは、不正確な時間の問題をすぐに解決します Apr 19, 2024 am 09:31 AM

Windows 11 コンピューターで間違った時間が表示されると、多くの問題が発生し、インターネットに接続できなくなる可能性があります。実際、システムが間違った日付と時刻を表示すると、一部のアプリケーションを開いたり実行したりすることを拒否します。では、この問題をどうやって解決すればいいのでしょうか?以下を見てみましょう!方法 1: 1. まず、下のタスク バーの空白スペースを右クリックし、[タスク バーの設定] を選択します。 2. タスク バーの設定で右側にある taskbarcorneroverflow3 を見つけて、その上にある時計または時計を見つけて、オンにすることを選択します。方法 2: 1. キーボード ショートカット win+r を押して「ファイル名を指定して実行」を呼び出し、「regedit」と入力して Enter キーを押して確認します。 2. レジストリ エディタを開き、その中で HKEY を見つけます。

Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Jun 25, 2023 pm 01:28 PM

Vue は非常に人気のあるフロントエンド フレームワークであり、コンポーネント化、データ バインディング、イベント処理など、開発者が効率的で柔軟で保守が容易な Web アプリケーションを構築するのに役立つ多くのツールと機能を提供します。この記事では、Vueを使ってカレンダーコンポーネントを実装する方法を紹介します。 1. 要件の分析 まず、このカレンダー コンポーネントの要件を分析する必要があります。基本的なカレンダーには次の機能が必要です: 当月のカレンダー ページの表示、前月または翌月への切り替えのサポート、特定の日のクリックのサポート、

See all articles