编程示例:蔡勒公式计算某一天是星期几 公式来源于1886年

news/2025/2/13 2:49:35/

计算星期可用   蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形):   

   W   =   Y   +   [Y/4]   +   [C/4]   -   2C   +   [13(M+1)/5]   +   D   -   1        
   公式中的符号含义如下:               C:世纪数减一(年的高两位数);               Y:年(年的低两位数);               M:月(M大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的                     13、14月来计算,比如2005年1月1日要看作2004年的13月1日来计算);               D:日;               []代表取整,即只要整数部分。               W:星期;W对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,                     5-星期五,6-星期六               注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了               方便计算,我们可以给它加上一个7的整数倍,使它变为一个正数。           以2005年2月14日为例:C=20,Y=4,M=14,D=14              
   W   =   4   +   [4/4]   +   [20/4]   -   2*20   +   [26*(14+1)/10]   +   14   -   1     =   4   +   1           +   5             -   40       +   39                           +   14   -   1                 
       =   22   (除以7余1)       所以2005年2月14日是星期一。  
//get_day_from_year_month_day(2023,9,25)    1
//get_day_from_year_month_day(2005,2,14)  
/以下为Javascript实现代码。
function get_day_from_year_month_day(p_year,p_month,p_day)
{
var Y=p_year%100;
var C=(p_year-Y)/100;
var M=p_month;
var D=p_day;

if(M<3)
{
  M=M+12;
  Y=Y-1;
}
 W=Y+Math.floor(Y/4)+Math.floor(C/4)-2*C+Math.floor(13*(M+1)/5)+D-1;
 return W%7;
}


测试用的html页面的源代码如下:
<html>
<head></head>
<body>

年:<input id="year" type=text value=1></input>
月:<input id="month" type=text value=6></input>
日:<input id="day" type=text value=6></input>
<input type=button οnclick="calc()" value="显示星期几"></input>
<textarea id='buffer' rows="8" cols="65"></textarea>
<hr/>
<script>
function get_day_from_year_month_day(p_year,p_month,p_day)
{
var Y=p_year%100;
var C=(p_year-Y)/100;
var M=p_month;
var D=p_day;

if(M<3)
{
  M=M+12;
  Y=Y-1;
}
 W=Y+Math.floor(Y/4)+Math.floor(C/4)-2*C+Math.floor(13*(M+1)/5)+D-1;
 return W%7;
}

function calc()
{
  var p_year=parseInt(document.getElementById("year").value,10);
  var p_month=parseInt(document.getElementById("month").value,10);
  var p_day=parseInt(document.getElementById("day").value,10);
 
 var result= get_day_from_year_month_day(p_year,p_month,p_day);
 printf_result(result);
}

function printf_result(result)
{
 
      if(result==0)
      {
        document.getElementById("buffer").innerHTML="星期天";
     }
     else
     {document.getElementById("buffer").innerHTML="星期"+result;
     }
    
}
</script>
</body>
</html>


http://www.ppmy.cn/news/1124513.html

相关文章

电子器件系列55:lm339比较器

以这个比较器为例 电压比较器可以看作是放大倍数接近“无穷大”的运算放大器。 电压比较器的功能&#xff1a;比较两个电压的大小(用输出电压的高或低电平&#xff0c;表示两个输入电压的大小关系)&#xff1a; 当””输入端电压高于”&#xff0d;”输入端时&#xff0c;电压…

联邦学习系统攻击与防御技术

​​​​​​​ 摘要 联邦学习作为一种使用分布式训练数据集构建机器学习模型的新兴技术&#xff0c;可有效解决不同数据用户之间因联合建模而导致的本地数据隐私泄露问题&#xff0c;从而被广泛应用于多个领域并得到迅速发展。然而&#xff0c;现有的联邦学习系统已被证实在…

51单片机自行车码表 速度里程计霍尔测速模拟电机设计

一、系统方案 本设计采用51单片机作为主控器&#xff0c;霍尔测速&#xff0c;数码管显示速度及里程数。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void init() { IT01; //INT0负跳变触发 TMOD0x01;//定时器工作于方式1 TH00x3c; //5…

持续集成Jenkins安装部署

Jenkins是一个在DevOps领域中、支持CI/CD&#xff08;持续集成/持续交付&#xff09;过程域的开源项目&#xff0c;其提供可扩展插件的支持&#xff0c;以自动化的机制对项目工程执行打包、编译、构建、测试以及最终发布到目的地服务器并成功部署运行&#xff0c;本文主要描述J…

CNC 3D浮雕 Aspire 11.55 Crack

Aspire 提供了功能强大且直观的软件解决方案&#xff0c;用于在 CNC 铣床上创建和切割零件。有用于 2D 设计和计算 2D 刀具路径的工具&#xff0c;例如仿形、型腔加工和钻孔以及 2.5D 刀具路径&#xff0c;包括&#xff1a;V 形雕刻、棱镜雕刻、成型刀具路径、凹槽、 倒角刀具路…

一、浏览器输入URL会发生什么

参考链接&#xff1a;B站视频链接&#xff1a;https://www.bilibili.com/video/BV1qL411G7uj/ 本视频讲述了HTTP协议及其工作原理&#xff0c;包括HTTP协议的三次握手建立TCP连接、HTTP请求报文、HTTP响应报文等。同时&#xff0c;本视频还介绍了浏览器解析域名并建立TCP连接的…

Github主页无法打开和Assets转圈

1、cmd启动命令行 2、github.com打不开&#xff0c;多刷新几遍。等成功打开时&#xff0c;命令行输入nslookup github.com,把非权威应答下的IP地址复制到C:\Windows\System32\drivers\etc\hosts里&#xff0c;如查到的IP是192.30.255.112&#xff0c;则填写 192.30.255.112 gi…

Pytorch之AlexNet花朵分类

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 一、AlexNet 1.卷积模块 2.全连接模块 3.AlexNet创新点 1.更深的神经…