基于视频的异常行为检测

研究基于视频的异常行为检测

导航

农历计算的类(原创)

今天很无聊,随便在网上乱逛,看到很多论坛的程序都提供漂亮的含有农历的日历,查阅了一些资料,改写了以下,编写如下的一个计算农历日期的类,希望有用,有谁知道有现成的月历表代码的话,不妨留个言.
<?php
class ChineseCalendar{
    
#农历每月的天数
    private static $everymonth=array(
    
0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),
    
1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),
    
2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),
    
3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),
    
4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
    
5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),
    
6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),
    
7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),
    
8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),
    
9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
    
10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),
    
11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),
    
12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),
    
13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),
    
14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
    
15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),
    
16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),
    
17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),
    
18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),
    
19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
    
20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),
    
21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),
    
22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),
    
23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),
    
24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
    
25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),
    
26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),
    
27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),
    
28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),
    
29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
    
30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),
    
31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),
    
32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),
    
33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),
    
34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
    
35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),
    
36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),
    
37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),
    
38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),
    
39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
    
40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),
    
41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),
    
42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),
    
43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),
    
44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
    
45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),
    
46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),
    
47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),
    
48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),
    
49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
    
50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),
    
51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),
    
52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),
    
53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),
    
54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
    
55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),
    
56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),
    
57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),
    
58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),
    
59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
    
60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),
    
61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),
    
62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),
    
63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
    
64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
    
65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),
    
66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),
    
67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),
    
68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
    
69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
    
70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
    
71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
    
72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
    
73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
    
74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
    
75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
    
76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
    
77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
    
78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
    
79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
    
80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
    
81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
    
82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
    
83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
    
84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
    
85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
    
86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
    
87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
    
88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
    
89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
    
90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
    
91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
    
92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
    
93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
    
94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
    
95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
    
96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
    
97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
    
98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
    
99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
    
100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
    
101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
    
102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
    
103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
    
104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
    
105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
    
106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
    
107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
    
108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
    
109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
    
110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
    
111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
    
112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
    
113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
    
114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
    
115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
    
116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
    
117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
    
118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
    
119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
    
120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
    );
    
##############################
    #农历天干
    private static  $mten=array("null","","","","","","","","","","");
    
#农历地支
    //private static  $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)","午(马)",
    //"未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");

    private static  $mtwelve=array("null","子,鼠","丑,牛","寅,虎","卯,兔","辰,龙","巳,蛇","午,马",
    
"未,羊","申,猴","酉,鸡","戌,狗","亥,猪");

    
#农历月份
    private static $mmonth=array("","","","","","","",
    
"","","","","十一","十二","");
    
#农历日
    private static  $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
    
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
    
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");
    
##############################
    #星期
    private static  $weekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
    
##############################

    
/**
     * 返回指定日期的农历日期数组对象
     * @example
     * <code>
     * require_once('calendar-fns.php');
     * $date=ChineseCalendar::getChineseCalendar(getdate());
     * </code>
     *
     * @param 日期 $date
     * @return 农历日期数组,格式为:(天干,地支,生肖,月,日,星期),例如:丙,戌,狗,十二月,十八,星期一
     
*/
    
public static function getChineseCalendar($date){
        
//$today=getdate();
        #阳历总天数 至1900年12月21日
        $total=11;
        
#阴历总天数
        $mtotal=0;

        
$today=$date;
        
if($today["year"]<1901 || $today["year"]>2020die("年份出错!");

        
$cur_wday=$today["wday"];

        
for($y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和
            $total+=365;
            
if ($y%4==0$total++;
        }
        
switch($today["mon"]) { //再加当年的几个月
            case 12:
                
$total+=30;
            
case 11:
                
$total+=31;
            
case 10:
                
$total+=30;
            
case 9:
                
$total+=31;
            
case 8:
                
$total+=31;
            
case 7:
                
$total+=30;
            
case 6:
                
$total+=31;
            
case 5:
                
$total+=30;
            
case 4:
                
$total+=31;
            
case 3:
                
$total+=28;
            
case 2:
                
$total+=31;
        }

        
if($today["year"]%4 == 0 && $today["mon"]>2$total++//如果当年是闰年还要加一天

        
$total=$total+$today["mday"]-1//加当月的天数

        
$flag1=0;  //判断跳出循环的条件
        $j=0;
        
while ($j<=120){  //用农历的天数累加来判断是否超过阳历的天数
            $i=1;
            
while ($i<=13){
                
$mtotal+=self::$everymonth[$j][$i];
                
if ($mtotal>=$total){
                    
$flag1=1;
                    
break;
                }
                
$i++;
            }
            
if ($flag1==1break;
            
$j++;
        }

        
if(self::$everymonth[$j][0]<>0 and self::$everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补
            $mm=$i-1;
        }
        
else{
            
$mm=$i;
        }

        
if($i== self::$everymonth[$j][0]+1 and self::$everymonth[$j][0]<>0) {
            
$nlmon=$mmonth[0].$mmonth[$mm];#闰月
        }
        
else {
            
$nlmon=self::$mmonth[$mm].self::$mmonth[13];
        }

        
#计算所求月份1号的农历日期
        $md=self::$everymonth[$j][$i]-($mtotal-$total);
        
if($md >self::$everymonth[$j][$i])
        
$md-=self::$everymonth[$j][$i];
        
$nlday=self::$mday[$md];

        
//丙,戌,狗,十二月,十八,星期一
        //array(6) { [0]=> string(3) "丙" [1]=> string(3) "戌" [2]=> string(3) "狗" [3]=> string(9) "十二月" [4]=> string(6) "十八" [5]=> string(9) "星期一" }

        $tmp=explode(',',self::$mtwelve[self::$everymonth[$j][15]]);
        
return array(
        self
::$mten[self::$everymonth[$j][14]],//天干
        $tmp[0],//地支
        $tmp[1],//生肖
        $nlmon,//农历月
        $nlday,//农历日
        self::$weekday[$cur_wday]//星期
        );
    }
}
?>

posted on 2007-02-07 04:22  zengqs  阅读(527)  评论(0编辑  收藏  举报