jQuery获取某天的农历日期并判断是否除夕或新年的方法


Posted in Javascript onMarch 01, 2016

本文实例讲述了jQuery获取某天的农历日期并判断是否除夕或新年的方法。分享给大家供大家参考,具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
  //------------------- Begin ----------------------
  CalendarHelper={};
  CalendarHelper.GetCNDate = function (D) {
    var CalendarData = new Array(100);
    var madd = new Array(12);
    var tgString = "甲乙丙丁戊己庚辛壬癸";
    var dzString = "子丑寅卯辰巳午未申酉戌亥";
    var numString = "一二三四五六七八九十";
    var monString = "正二三四五六七八九十冬腊";
    var weekString = "日一二三四五六";
    var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
    var cYear, cMonth, cDay, TheDate;
    CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95);
    madd[0] = 0;
    madd[1] = 31;
    madd[2] = 59;
    madd[3] = 90;
    madd[4] = 120;
    madd[5] = 151;
    madd[6] = 181;
    madd[7] = 212;
    madd[8] = 243;
    madd[9] = 273;
    madd[10] = 304;
    madd[11] = 334;
    function GetBit(m, n) {
      return (m >> n) & 1;
    }
    function e2c() {
      TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
      var total, m, n, k;
      var isEnd = false;
      var tmp = TheDate.getYear();
      if (tmp < 1900) {
        tmp += 1900;
      }
      total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;
      if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
        total++;
      }
      for (m = 0; ; m++) {
        k = (CalendarData[m] < 0xfff) ? 11 : 12;
        for (n = k; n >= 0; n--) {
          if (total <= 29 + GetBit(CalendarData[m], n)) {
            isEnd = true; break;
          }
          total = total - 29 - GetBit(CalendarData[m], n);
        }
        if (isEnd) break;
      }
      cYear = 1921 + m;
      cMonth = k - n + 1;
      cDay = total;
      if (k == 12) {
        if (cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
          cMonth = 1 - cMonth;
        }
        if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
          cMonth--;
        }
      }
    }
    function GetcDateString() {
      var tmp = "";
      tmp += tgString.charAt((cYear - 4) % 10);
      tmp += dzString.charAt((cYear - 4) % 12);
      tmp += "(";
      tmp += sx.charAt((cYear - 4) % 12);
      tmp += ")年 ";
      if (cMonth < 1) {
        tmp += "(闰)";
        tmp += monString.charAt(-cMonth - 1);
      } else {
        tmp += monString.charAt(cMonth - 1);
      }
      tmp += "月";
      tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
      if (cDay % 10 != 0 || cDay == 10) {
        tmp += numString.charAt((cDay - 1) % 10);
      }
      return tmp;
    }
    function GetLunarDay(solarYear, solarMonth, solarDay) {
      //solarYear = solarYear<1900?(1900+solarYear):solarYear;
      if (solarYear < 1921 || solarYear > 2020) {
        return "";
      } else {
        solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
        e2c(solarYear, solarMonth, solarDay);
        return GetcDateString();
      }
    }
    var yy = D.getFullYear();
    var mm = D.getMonth() + 1;
    var dd = D.getDate();
    var ww = D.getDay();
    var ss = parseInt(D.getTime() / 1000);
    if (yy < 100) yy = "19" + yy;
    return GetLunarDay(yy, mm, dd);
  };
  CalendarHelper.GetAddDay = function (D, v) {
    var LSTR_ndate = D;
    var LSTR_Year = LSTR_ndate.getYear();
    var LSTR_Month = LSTR_ndate.getMonth();
    var LSTR_Date = LSTR_ndate.getDate();
    //处理
    var uom = new Date(LSTR_Year, LSTR_Month, LSTR_Date);
    uom.setDate(uom.getDate() + v); //取得系统时间的前一天,重点在这里,负数是前几天,正数是后几天
    return uom;
  }
  //是否除夕
  CalendarHelper.IsLastDayBeforeNewYearOfCN = function (D) {
    var strCurrDay = CalendarHelper.GetCNDate(D);
    var strNextDay = CalendarHelper.GetCNDate(CalendarHelper.GetAddDay(D, 1));
    //alert(strCurrDay+","+strNextDay);
    return strCurrDay.split('年')[0] != strNextDay.split('年')[0];
  };
  //是否春节
  CalendarHelper.IsNewYearOfCN = function (D) {
    var strCurrDay = CalendarHelper.GetCNDate(D);
    var strPrevDay = CalendarHelper.GetCNDate(CalendarHelper.GetAddDay(D, -1));
    //alert(strCurrDay+","+strPrevDay);
    return strCurrDay.split('年')[0] != strPrevDay.split('年')[0];
  };
  //------------------- End ----------------------
  var d1 = new Date();
  var d2 = new Date(2013, 1, 9); //注:此处相当于2013年2月9号
  var d3 = new Date(2013, 1, 10);
  var result = GetResult(d1) + GetResult(d2) + GetResult(d3);
  alert(result);
  function GetResult(D) {
    var y = D.getFullYear();
    var m = D.getMonth() + 1;
    var dd = D.getDate();
    var str = y + "年" + m + "月" + dd + "日";
    var isR = CalendarHelper.IsLastDayBeforeNewYearOfCN(D);
    var isN = CalendarHelper.IsNewYearOfCN(D);
    return "日期:"+str+","+ (isR?"是":"不是") + "除夕" + "," + (isN?"是":"不是") + "春节\n\n" ;
  }
</script>
</head>
<body>
</body>
</html>

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
Javascript浅谈之引用类型
Dec 18 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
javascript面向对象快速入门实例
Jan 13 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
浅谈js多维数组和hash数组定义和使用
Jul 27 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
Vue3.0数据响应式原理详解
Oct 09 Javascript
2019最新21个MySQL高频面试题介绍
Feb 06 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
Vue触发input选取文件点击事件操作
Aug 07 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 #Javascript
JavaScript Date对象详解
Mar 01 #Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 #Javascript
jQuery增加与删除table列的方法
Mar 01 #Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 #Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 #Javascript
JavaScript Array对象详解
Mar 01 #Javascript
You might like
php empty函数 使用说明
2009/08/10 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
小程序实现分类页
2019/07/12 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
js实现简单的打印表格
2020/01/15 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
编写多线程Python服务器 最适合基础
2018/09/14 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python 从attribute到property详解
2020/03/05 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
python 绘制国旗的示例
2020/09/27 Python
Python高并发和多线程有什么关系
2020/11/14 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
2016年暑假家长对孩子评语
2015/12/01 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang