バージョン選択

フォーラム

メニュー

オンライン状況

19 人のユーザが現在オンラインです。 (13 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 19
もっと...

サイト内検索

機能要望 > その他 > 休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。

その他

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
sumida
投稿日時: 2013/10/20 21:01
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。
1. 振替休日(カレンダーブロック)
制限事項:
・次月への振替休日は考慮していません。
・実在する日付の確認はしていません。
・配列変数$arrHolidayに[$year]の次元を追加しました。

data/class/SC_Date.php

    public function isHoliday($year, $month, $day)
    {
// -01 changed
        if (is_null(SC_Date_Ex::$arrHoliday)) $this->setArrHoliday($year);
        if (is_null(SC_Date_Ex::$arrHoliday[$year])) $this->setArrHoliday($year);
// -01 changed
        if (is_null(SC_Date_Ex::$arrRegularHoliday)) $this->setRegularHoliday();

// -01 changed
        if (!empty(SC_Date_Ex::$arrHoliday[$year][$month])) {
            if (in_array($day, SC_Date_Ex::$arrHoliday[$year][$month])) {
// -01 changed
                return true;
            }
        }
        if (!empty(SC_Date_Ex::$arrRegularHoliday)) {
            $day = date('w', mktime(0,0,0 ,$month, $day, $year));
            if (in_array($day, SC_Date_Ex::$arrRegularHoliday)) {
                return true;
            }
        }

        return false;
    }


// -01 changed
    private function setArrHoliday($year)
// -01 changed
    {
        $objHoliday = new SC_Helper_Holiday_Ex();
        $holiday = $objHoliday->getList();
// -01 changed
        $arrHoliday[$year] = array();
        foreach ($holiday AS $val) {
            $arrHoliday[$year][$val['month']][] = $val['day'];
        }
// -01 changed
// -01 added
        // 振替休日の確認
        $arrHolidayNew = array();
        foreach ($arrHoliday[$year] AS $month => $arrDay) {
          foreach ($arrDay AS $key => $day) {
            $weekHoliday = date('w', mktime(0, 0, 0, $month, $day, $year));
            if ($weekHoliday == 0) {
                // 日曜日
                $newDay = $day;
                // 休日でない日は?
                do {
                    $newDay += 1;
                } while(in_array($newDay, $arrDay));
                // 振替休日
                $arrHolidayNew[$year][$month][] = $newDay;
            }
          }
        }
        // 振替休日の追加
        foreach ($arrHolidayNew as $year => $arrMonth) {
            foreach ($arrMonth as $month => $arrDay) {
                foreach ($arrDay as $day) {
                    $arrHoliday[$year][$month][] = $day;
                }
            }
        }
// -01 added
        SC_Date_Ex::$arrHoliday = $arrHoliday;
    }


data/Smarty/templates/admin/basis/holiday.tpl

<!--{* -01 deleted
                    <br />
                    <span class="attention">振替休日は自動設定されないので、振替え先の日付を設定してください。</span>
-01 deleted *}-->


2. 第2月曜・第3月曜
制限事項:
・実在する日付の確認はしていません。
仕様:
dtb_holidayテーブルに、「第2月曜・第3月曜」を示す日付を格納する。
  上記日付は、「-xy」
    -:「第xy曜」
    x:第?週
    y:曜日(0:日曜〜6:土曜)
  つまり、
    -21:第2月曜
    -31:第3月曜

data/class/SC_Date.php
新規追加

// -02 added
    public function getDayHoliday($default = false)
    {
        $day_array = array();

        if ($default) $day_array[''] = '--';

        // 0:日曜〜6:土曜
        $day_array[-21] = '第2月曜';
        $day_array[-31] = '第3月曜';

        for ($i=0; $i < 31; $i++) {
            $day_array[ $i + 1 ] = $i + 1;
        }

        return $day_array;
    }
// -02 added


data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php

    public function action()
    {
        $objHoliday = new SC_Helper_Holiday_Ex();

        $objDate = new SC_Date_Ex();
        $this->arrMonth = $objDate->getMonth();
// -02 changed
        $this->arrDay = $objDate->getDayHoliday();
// -02 changed

data/Smarty/templates/admin/basis/holiday.tpl

                <td><!--{$arrHoliday[cnt].title|h}--></td>
<!--{* -02 changed *}-->
                <!--{assign var=holiday_day value=$arrHoliday[cnt].day}-->
                <td><!--{$arrHoliday[cnt].month|h}-->月<!--{$arrDay[$holiday_day]|h}-->日</td>
<!--{* -02 changed *}-->


data/class/SC_Date.php
上記、1.の修正分に追加

    private function setArrHoliday($year)
    {
        $objHoliday = new SC_Helper_Holiday_Ex();
        $holiday = $objHoliday->getList();
        $arrHoliday[$year] = array();
        foreach ($holiday AS $val) {
// -02 added
          if ($val['day'] < 0) {
            // その月の始まりは何曜日か(0:日曜〜6:土曜)
            $weekly1st = date('w', mktime(0, 0, 0, $val['month'], 1, $year));
            // 求めたい曜日:$targetWeeklyDay
            $targetWeeklyDay = abs($val['day']) % 10;
            // 指定された曜日の第1週
            $firstDay = ($targetWeeklyDay - $weekly1st >= 0) ? 1 + $targetWeeklyDay - $weekly1st : 1 + $targetWeeklyDay - $weekly1st + 7;
            // 求めたい週:$week
            $week = intval(abs($val['day']) / 10);
            // 日にちを算出:$day
            $targetDay  = $firstDay + ( 7 * ($week - 1) );
            $arrHoliday[$year][$val['month']][] = $targetDay;
          } else {
// -02 added
            $arrHoliday[$year][$val['month']][] = $val['day'];
// -02 added
          }
// -02 added
        }
        // 振替休日の確認
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。 sumida 2013/10/20 21:01
     Re: 休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。 k-kuwahara 2013/10/24 20:00
       Re: 休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。 sumida 2013/10/24 20:33
         Re: 休日関係で、「振替休日」「第2月曜・第3月曜」をやってみました。 sumida 2013/10/26 18:53
           「春分の日」「秋分の日」「国民の休日」もやってみました。 sumida 2014/2/3 16:18

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,335名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.