设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 7312|回复: 14
收起左侧

[PHP/ASP/JSP] 年月日算星期几终极算法 已知年月日求周几PHP版纯公式算法 年份上不封顶 中文函数变量

[复制链接]
发表于 2019-2-3 11:17:26 | 显示全部楼层 |阅读模式
本帖最后由 QAQ 于 2019-2-3 11:17 编辑


  1. <?php

  2. $全局变量 = array(
  3.         "平年月数表" => array(31,28,31,30,31,30,31,31,30,31,30,31),
  4.         "闰年月数表" => array(31,29,31,30,31,30,31,31,30,31,30,31),
  5.         "平年月代码" => array(6,2,2,5,0,3,5,1,4,6,2,4),
  6.         "闰年月代码" => array(5,1,2,5,0,3,5,1,4,6,2,4),
  7.         
  8. );

  9. function 是否为闰年($年){
  10.         return ($年 %4 == 0 && $年 %100 !=0 || $年 %400 ==0) ? 1 : 0;
  11. }

  12. function 取当前年天数($年){
  13.         return 是否为闰年($年) ? 366 : 365;
  14. }

  15. function 取闰年数($年){
  16.         return floor($年/4)-floor($年/100)+floor($年/400);        //此处除法向下取整 不保留小数否则会出错
  17. }

  18. function 取年天数($年){
  19.         return $年*365 + 取闰年数($年);
  20. }


  21. function 取某月天数($年,$月){
  22.         global $全局变量;
  23.         return $全局变量[(是否为闰年($年) ? "闰" : "平")."年月数表"][$月-1];
  24.         
  25. }

  26. function 年月日是否有效($年,$月,$日){
  27.         if($年 < 0 || $月 < 1 || $日< 1 || $月 >12) return 0;        
  28.         return $日 <= 取某月天数($年,$月) ? 1 : 0;
  29.         
  30. }

  31. function 取元旦星期($年){        //星期1为1 星期2为2 ... 星期日为0
  32.         return ((1+取年天数($年)-取当前年天数($年))%7);

  33. }

  34. function 取星期几($年,$月,$日){         //星期日为1 星期1为2 以此类推 (失败返回0)
  35.         global $全局变量;
  36.         if(!年月日是否有效($年,$月,$日)) return 0;
  37.         
  38.         $闰年 =                是否为闰年($年);
  39.         $元旦星期 =         取元旦星期($年);
  40.         $年代码 =        $闰年 ? (($元旦星期+2)%7) : (($元旦星期+8)%7);
  41.         $月代码 =        $全局变量[($闰年 ? "闰" : "平")."年月代码"][$月-1];
  42.         $星期        =        ($年代码+$月代码+$日)%7;
  43.         if($星期 == 0)        $星期=7;        //结果0则为星期6
  44.         return $星期;
  45. }


  46. function 取文本星期($数字星期,$星期方式 = 0){        //参数1:取星期几() 返回的值 参数2: 0为星期几 1为周几 (默认为0)
  47.         $星期文本 = $星期方式 ? "周" : "星期";
  48.                 switch($数字星期){
  49.                 case 1:return $星期文本."日";
  50.                 case 2:return $星期文本."一";
  51.                 case 3:return $星期文本."二";
  52.                 case 4:return $星期文本."三";
  53.                 case 5:return $星期文本."四";
  54.                 case 6:return $星期文本."五";
  55.                 case 7:return $星期文本."六";
  56.                 default:return "无效星期";
  57.                 }        

  58. }

  59. echo 取文本星期(取星期几(2019,2,3))."<br>";
  60. echo 取文本星期(取星期几(2022,2,22))."<br>";
  61. echo 取文本星期(取星期几(2222,2,22))."<br>";
  62. echo 取文本星期(取星期几(9999,12,13))."<br>";

  63. echo 取文本星期(取星期几(10000,1,1))."<br>";
  64. echo 取文本星期(取星期几(0,1,1))."<br>";
  65. echo 取文本星期(取星期几(1,1,1))."<br>";


  66. echo 取文本星期(取星期几(2020,2,29))."<br>";



  67. ?>

复制代码

相关帖子

发表于 2019-2-5 05:10:08 | 显示全部楼层
啧啧啧 发表于 2019-2-4 15:34
你这是发错了吧 这贴没奖励

不好意思,就这样吧,没权限管理这板块
发表于 2019-2-5 00:55:12 | 显示全部楼层
啧啧啧 发表于 2019-2-4 15:34
你这是发错了吧 这贴没奖励

的确搞错了
发表于 2019-2-4 15:34:02 | 显示全部楼层

你这是发错了吧 这贴没奖励
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 17:07 , Processed in 0.435025 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表