html日历(3)
<!DOCTYPE html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<TITLE></TITLE>
<SCRIPT language="JavaScript">
<!--
var lunarInfo = new Array(
0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,
0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,
0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,
0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,
0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,
0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,
0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,
0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,
0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,
0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,
0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,
0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,
0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0) var solarMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var Animals = new Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪");
var solarTerm = new Array("小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至");
var sTermInfo = new Array(0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758);
var nStr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十');
var nStr2 = new Array('初', '十', '廿', '卅');
//公历节日
var sFtv = new Array(
"0101 元旦",
"0214 情人节",
"0308 妇女节",
"0312 植树节",
"0315 消费者权益日",
"0401 愚人节",
"0501 劳动节",
"0504 青年节",
"0512 护士节",
"0601 儿童节",
"0701 建党节",
"0801 建军节",
"0910 教师节",
"0928 孔子诞辰",
"1001 国庆节",
"1006 老人节",
"1024 联合国日",
"1224 平安夜",
"1225 圣诞节")
//农历节日
var lFtv = new Array(
"0101 春节",
"0115 元宵节",
"0505 端午节",
"0707 七夕情人节",
"0715 中元节",
"0815 中秋节",
"0909 重阳节",
"1208 腊八节",
"1224 小年")
//返回农历y年的总天数
function lYearDays(y) {
var i, sum = 348;
for(i = 0x8000; i > 0x8; i >>= 1) sum += (lunarInfo[y - 1900] & i) ? 1 : 0;
return(sum + leapDays(y));
}
//返回农历y年闰月的天数
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
else return(0);
}
//判断y年的农历中那个月是闰月,不是闰月返回0
function leapMonth(y) {
return(lunarInfo[y - 1900] & 0xf);
}
//返回农历y年m月的总天数
function monthDays(y, m) {
return((lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
}
//算出当前月第一天的农历日期和当前农历日期下一个月农历的第一天日期
function Dianaday(objDate) {
var i, leap = 0,
temp = 0;
var baseDate = new Date(1900, 0, 31);
var offset = (objDate - baseDate) / 86400000;
this.dayCyl = offset + 40;
this.monCyl = 14;
for(i = 1900; i < 2050 && offset > 0; i++) {
temp = lYearDays(i)
offset -= temp;
this.monCyl += 12;
}
if(offset < 0) {
offset += temp;
i--;
this.monCyl -= 12;
}
this.year = i;
this.yearCyl = i - 1864;
leap = leapMonth(i); //闰哪个月
this.isLeap = false;
for(i = 1; i < 13 && offset > 0; i++) {
if(leap > 0 && i == (leap + 1) && this.isLeap == false) { //闰月
--i;
this.isLeap = true;
temp = leapDays(this.year);
} else {
temp = monthDays(this.year, i);
}
if(this.isLeap == true && i == (leap + 1)) this.isLeap = false; //解除闰月
offset -= temp;
if(this.isLeap == false) this.monCyl++;
}
if(offset == 0 && leap > 0 && i == leap + 1)
if(this.isLeap) {
this.isLeap = false;
} else {
this.isLeap = true;
--i;
--this.monCyl;
}
if(offset < 0) {
offset += temp;
--i;
--this.monCyl;
}
this.month = i;
this.day = offset + 1;
}
//返回公历y年m+1月的天数
function solarDays(y, m) {
if(m == 1)
return(((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
else
return(solarMonth[m]);
}
//记录公历和农历某天的日期
function calElement(sYear, sMonth, sDay, week, lYear, lMonth, lDay, isLeap) {
this.isToday = false;
//公历
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//农历
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//节日记录
this.lunarFestival = ''; //农历节日
this.solarFestival = ''; //公历节日
this.solarTerms = ''; //节气
}
//返回某年的第n个节气为几日(从0小寒起算)
function sTerm(y, n) {
var offDate = new Date((31556925974.7 * (y - 1900) + sTermInfo[n] * 60000) + Date.UTC(1900, 0, 6, 2, 5));
return(offDate.getUTCDate())
}
//保存y年m+1月的相关信息
var fat = mat = 9;
var eve = 0; function calendar(y, m) {
fat = mat = 0;
var sDObj, lDObj, lY, lM, lD = 1,
lL, lX = 0,
tmp1, tmp2;
var lDPOS = new Array(3);
var n = 0;
var firstLM = 0;
sDObj = new Date(y, m, 1); //当月第一天的日期
this.length = solarDays(y, m); //公历当月天数
this.firstWeek = sDObj.getDay(); //公历当月1日星期几
if((m + 1) == 5) {
fat = sDObj.getDay()
}
if((m + 1) == 6) {
mat = sDObj.getDay()
}
for(var i = 0; i < this.length; i++) {
if(lD > lX) {
sDObj = new Date(y, m, i + 1); //当月第一天的日期
lDObj = new Dianaday(sDObj); //农历
lY = lDObj.year; //农历年
lM = lDObj.month; //农历月
lD = lDObj.day; //农历日
lL = lDObj.isLeap; //农历是否闰月
lX = lL ? leapDays(lY) : monthDays(lY, lM); //农历当月最後一天
if(lM == 12) {
eve = lX
}
if(n == 0) firstLM = lM;
lDPOS[n++] = i - lD + 1;
}
this[i] = new calElement(y, m + 1, i + 1, nStr1[(i + this.firstWeek) % 7], lY, lM, lD++, lL);
if((i + this.firstWeek) % 7 == 0) {
this[i].color = 'red'; //周日颜色
}
}
//节气
tmp1 = sTerm(y, m * 2) - 1;
tmp2 = sTerm(y, m * 2 + 1) - 1;
this[tmp1].solarTerms = solarTerm[m * 2];
this[tmp2].solarTerms = solarTerm[m * 2 + 1];
if((this.firstWeek + 12) % 7 == 5) //黑色星期五
this[12].solarFestival += '黑色星期五';
if(y == tY && m == tM) this[tD - 1].isToday = true; //今日
}
//用中文显示农历的日期
function cDay(d) {
var s;
switch(d) {
case 10:
s = '初十';
break;
case 20:
s = '二十';
break;
break;
case 30:
s = '三十';
break;
break;
default:
s = nStr2[Math.floor(d / 10)];
s += nStr1[d % 10];
}
return(s);
}
//在表格中显示公历和农历的日期,以及相关节日
var cld; function drawCld(SY, SM) {
var TF = true;
var p1 = p2 = "";
var i, sD, s, size;
cld = new calendar(SY, SM);
GZ.innerHTML = ' 【' + Animals[(SY - 4) % 12] + '】'; //生肖
for(i = 0; i < 42; i++) {
sObj = eval('SD' + i);
lObj = eval('LD' + i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD > -1 && sD < cld.length) { //日期内
sObj.innerHTML = sD + 1;
if(cld[sD].isToday) {
sObj.style.color = '#9900FF';
} //今日颜色
else {
sObj.style.color = '';
}
if(cld[sD].lDay == 1) { //显示农历月
lObj.innerHTML = '<b>' + (cld[sD].isLeap ? '闰' : '') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear, cld[sD].lMonth) == 29 ? '小' : '大') + '</b>';
} else {
lObj.innerHTML = cDay(cld[sD].lDay);
} //显示农历日
var Slfw = Ssfw = null;
s = cld[sD].solarFestival;
for(var ipp = 0; ipp < lFtv.length; ipp++) { //农历节日
if(parseInt(lFtv[ipp].substr(0, 2)) == (cld[sD].lMonth)) {
if(parseInt(lFtv[ipp].substr(2, 4)) == (cld[sD].lDay)) {
lObj.innerHTML = lFtv[ipp].substr(5);
Slfw = lFtv[ipp].substr(5);
}
}
if(12 == (cld[sD].lMonth)) { //判断是否为除夕
if(eve == (cld[sD].lDay)) {
lObj.innerHTML = "除夕";
Slfw = "除夕";
}
}
}
for(var ipp = 0; ipp < sFtv.length; ipp++) { //公历节日
if(parseInt(sFtv[ipp].substr(0, 2)) == (SM + 1)) {
if(parseInt(sFtv[ipp].substr(2, 4)) == (sD + 1)) {
lObj.innerHTML = sFtv[ipp].substr(5);
Ssfw = sFtv[ipp].substr(5);
}
}
}
if((SM + 1) == 5) { //母亲节
if(fat == 0) {
if((sD + 1) == 7) {
Ssfw = "母亲节";
lObj.innerHTML = "母亲节"
}
} else if(fat < 9) {
if((sD + 1) == ((7 - fat) + 8)) {
Ssfw = "母亲节";
lObj.innerHTML = "母亲节"
}
}
}
if((SM + 1) == 6) { //父亲节
if(mat == 0) {
if((sD + 1) == 14) {
Ssfw = "父亲节";
lObj.innerHTML = "父亲节"
}
} else if(mat < 9) {
if((sD + 1) == ((7 - mat) + 15)) {
Ssfw = "父亲节";
lObj.innerHTML = "父亲节"
}
}
}
if(s.length <= 0) { //设置节气的颜色
s = cld[sD].solarTerms;
if(s.length > 0) s = s.fontcolor('limegreen');
}
if(s.length > 0) {
lObj.innerHTML = s;
Slfw = s;
} //节气
if((Slfw != null) && (Ssfw != null)) {
lObj.innerHTML = Slfw + "/" + Ssfw;
}
} else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
}
}
}
//在下拉列表中选择年月时,调用自定义函数drawCld(),显示公历和农历的相关信息
function changeCld() {
var y, m;
y = CLD.SY.selectedIndex + 1900;
m = CLD.SM.selectedIndex;
drawCld(y, m);
}
//用自定义变量保存当前系统中的年月日
var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();
//打开页时,在下拉列表中显示当前年月,并调用自定义函数drawCld(),显示公历和农历的相关信息
function initial() {
CLD.SY.selectedIndex = tY - 1900;
CLD.SM.selectedIndex = tM;
drawCld(tY, tM);
}
//-->
</SCRIPT> <BODY onload=initial()>
<CENTER>
<FORM name=CLD>
<TABLE>
<TR>
<TD align=middle>
<TABLE border=1 cellpadding="0" cellspacing="0" bordercolordark="#FFFFFF" bordercolor="#ffffff" bordercolorlight="#EEEEEE">
<TR bgcolor="#006600">
<TD colSpan=7>
<FONT color=#ffffff style="FONT-SIZE: 9pt">公历
<SELECT name=SY onchange=changeCld() style="FONT-SIZE: 9pt">
<SCRIPT language="JavaScript">
for(i = 1900; i < 2050; i++) document.write('<option>' + i);
</SCRIPT>
</SELECT> 年
<SELECT name=SM onchange=changeCld() style="FONT-SIZE: 9pt">
<SCRIPT language="JavaScript">
for(i = 1; i < 13; i++) document.write('<option>' + i);
</SCRIPT>
</SELECT> 月 </FONT>
<FONT color=#ffffff face=宋体 id=GZ style="FONT-SIZE: 12pt"></FONT>
<BR>
</TD>
</TR>
<TR align=middle bgColor=#e0e0e0>
<TD width=54 style="font-size:9pt; padding:5pt;">日</TD>
<TD width=54 style="font-size:9pt ">一</TD>
<TD width=54 style="font-size:9pt ">二</TD>
<TD width=54 style="font-size:9pt ">三</TD>
<TD width=54 style="font-size:9pt ">四</TD>
<TD width=54 style="font-size:9pt ">五</TD>
<TD width=54 style="font-size:9pt ">六</TD>
</TR>
<SCRIPT language="JavaScript">
var gNum;
for(i = 0; i < 6; i++) {
document.write('<tr align=center>');
for(j = 0; j < 7; j++) {
gNum = i * 7 + j;
document.write('<td id="GD' + gNum + '"><font id="SD' + gNum + '" size=2 face="Arial Black"');
if(j == 0) document.write(' color=red');
if(j == 6) document.write(' color=#000080');
document.write(' TITLE=""> </font><br><font id="LD' + gNum + '" size=2 style="font-size:9pt"> </font></td>');
}
document.write('</tr>');
}
</SCRIPT>
</TABLE>
</TD>
</TR>
</TABLE>
</FORM>
</CENTER>
</BODY> </HTML>

html日历(3)的更多相关文章
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
- 开源一款简单清爽的日历组件,JavaScript版的
源码会在最后给出地址,需要的朋友自己去下载.最近项目需要做一个日程安排的功能,就是点击日历的某一天弹出一个录入页面,填完信息后保存当天的日程安排.有日程的日期会有不同的标记(比如加一个背景色啥的).网 ...
- FullCalendar日历插件说明文档
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...
- 被逼着写的jquery工作日管理日历插件
因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- [JS,Canvas]日历时钟
[JS,Canvas]日历时钟 Html: <!doctype html> <html> <head> <meta charset="UTF-8&q ...
- 用NSCalendar和UICollectionView自定义日历,并实现签到显示
前一段时间因为工作需要实现了一个可以签到的日历,来记录一下实现的思路 效果如图: 这里的基本需求是: 1,显示用户某个月的签到情况,已经签到的日子打个圈,没有签到且在某个时间范围内的可以签到,其他 ...
- java日历显示年份、月份
import java.util.Scanner;class CalendarMain{ //主函数入口 public static void main(String[] args) ...
- 网页日历显示控件calendar3.1
关于日历控件,我做了好多次尝试,一直致力于开发一款简单易用的日历控件.我的想法是争取在引用这个控件后,用一行js代码就能做出一个日历,若在加点参数,就能自定义外观和功能丰富多彩的日历.Calendar ...
- Python学习实践-----打印日历
使用python语言实现在控制台打印日历 输入年.月.日 输出对应日历,指定的日数输出为'--' 程序没有做严格的输入验证,故输入整数即可. 以下为没有优化的源码: print_calendar.py ...
随机推荐
- 大白话Vue源码系列(05):运行时鸟瞰图
阅读目录 Vue 实例的生命周期 实例创建 响应的数据绑定 挂载到 DOM 节点 结论 研究 runtime 一边 Vue 一边源码 初看 Vue 是 Vue 源码是源码 再看 Vue 不是 Vue ...
- php-递归创建级联目录
方法一: function mk_dir($path_arr,$root){ if(!empty($path_arr)){ static $path;//每次保存上次调用的值 $path .= '/' ...
- js功能代码大全
1.日期格式化 //化为2017-08-14 function formatDate (date) { var y = date.getFullYear(); var m = date.getMont ...
- cp 命令详解
作用: cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录下, 若同时指定多个文件或目录, 而最后的目的 ...
- JVM虚拟机(一) 内存区域
JVM虚拟机内存组成: 如下图: 1. 程序计数器: (1)是一块较小的内存空间:可以看做当前程序执行子界面的行号指示器,字节码解析器执行的时候就是根据这个 ...
- 字符串MD5加密运算
public static string GetMd5String(string str) { MD5 md5 = MD5.Create(); by ...
- Android 内存暴减的秘密?!
作者:杨超,腾讯移动客户端开发 工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest 导读 在我这样减少了26.5M Java内存! 一文中内存优化一期已经告一段落, ...
- java 信号量Semaphore
Semaphore 信号量主要用于约束多个线程可同时获取的物理上的或者逻辑上的资源数.比如用在各种池的设计中. 信号量用于管理这些资源的一个虚拟的管理凭据.线程在获取一个资源时,首先要获取一个资源的许 ...
- K:枚举的线程安全性及其序列化问题
枚举是如何保证线程安全的且其在序列化和反序列化的操作中是单例的? 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关 ...
- c# 去除字符串中重复字符
String.Join 和 Distinct 方法 https://www.cnblogs.com/louby/p/6224960.html 1.在写程序中经常操作字符串,需要去重,以前我的用方式利用 ...