[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 JEUI\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "jeDate.js\n=======\njeDate V6.5.0 是一款原生JS开发的 不依赖任何第三方库 大众化的日期控件，她身兼多职，虽不是万能的，但是她却是功能强大多样的美少女，她除了包含 单双面板、区域选择、 多语言、日历固定、有效无效日期、日期时间戳转换、日期加减、限制时分秒、初始化日期加减N、日期标注点、设定年月（YYYY-MM）、日期范围限制、开始日期设定、自定义日期格式、当天的前后若干天返回、时分秒选择、智能响应、自动纠错、节日识别，操作等常规功能外，根据不同的日期格式，显示不同内容，还拥有更多趋近完美的解决方案。更多的是需要你与她的亲密接触与呵护！ QQ群：516754269 \n\n**使用方法**\n\n* [点击查看详细日期API（http://www.jemui.com/uidoc/jedate.html）](http://www.jemui.com/uidoc/jedate.html) \n\n\n# 快速上手\n\n**使用NPM安装**\n\n    npm install jquery.jedate\n    \n**使用Git安装**\n\n    git clone git://github.com/singod/jeDate.git\n    \n**使用对象**\n\n    <input class=\"datainp\" id=\"indate\" type=\"text\" placeholder=\"请选择\"  readonly>\n    <input class=\"datainp\" id=\"dateinfo\" type=\"text\" placeholder=\"请选择\"  readonly>\n      \n\n**查看演示**\n\n* [查看演示](http://singod.github.io/jeDate/)   \n\n\n## License\n\n[MIT License](https://github.com/singod/jeDate/blob/gh-pages/LICENSE)\n"
  },
  {
    "path": "index.html",
    "content": "<!doctype html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"initial-scale=1, maximum-scale=1, user-scalable=no\">\r\n    <title>jeDate日期控件(原生JS) - 演示</title>\r\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"test/jeDate-test.css\">\r\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"skin/jedate.css\">\r\n    <script type=\"text/javascript\" src=\"src/jedate.js\"></script>\r\n</head>\r\n<body>\r\n<div class=\"jebody\">\r\n    <blockquote class=\"jequote\">\r\n        <p style=\"text-align: center;font-size:24px;padding-bottom: 15px;\">jeDate日期控件 - (原生JS)</p>\r\n        jeDate6.5.0是一款原生JS开发的<span style=\"color: red\">不依赖任何第三方库</span>大众化的日期控件，她身兼多职，虽不是万能的，但是她却是功能强大多样的美少女，她除了包含 单双面板、区域选择、 多语言、日历固定、有效无效日期、日期时间戳转换、日期加减、限制时分秒、初始化日期加减N、日期标注点、设定年月（YYYY-MM）、日期范围限制、开始日期设定、自定义日期格式、当天的前后若干天返回、时分秒选择、智能响应、自动纠错、节日识别，操作等常规功能外，根据不同的日期格式，显示不同内容，还拥有更多趋近完美的解决方案。更多的是需要你与她的亲密接触与呵护！</span> <br/> \r\n        jeDate群01：516754269（已满） &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  jeDate群02：73371254<br/><br/>\r\n        <span style=\"color: red\">此为部分个例展示，更多请看</span>&nbsp;&nbsp; <a href=\"http://www.jemui.com\" style=\"color:#0a60d6;text-decoration:underline;\">详细日期控件API</a>。<br/><br/>\r\n    </blockquote>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">常规选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test01\" placeholder=\"YYYY\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test02\" placeholder=\"YYYY-MM\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月日选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test03\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月日时分秒选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test04\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">时分秒选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test05\" placeholder=\"hh:mm:ss\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">英文语言</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月日选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"enYMD\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月日时分秒</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"enYMDhms\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">时分秒选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"enhms\" placeholder=\"hh:mm:ss\"></div>\r\n            </div>\r\n            \r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">自定义主题色</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">蓝色主题</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"testblue\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">绿色主题</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"testgray\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">红色主题</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"testred\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            \r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">区域范围选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test06\" placeholder=\"YYYY\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test07\" placeholder=\"YYYY-MM\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">日范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test08\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            \r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">区域范围双面板选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test09\" placeholder=\"YYYY\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">年月范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test10\" placeholder=\"YYYY-MM\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">日范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test11\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">日时分秒范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test11A\" placeholder=\"YYYY-MM-DD hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">时分秒范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test11B\" placeholder=\"hh:mm:ss\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">时分范围选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test11C\" placeholder=\"hh:mm\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">自定义格式选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">自定义格式</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test12\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">自定义格式</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test13\" placeholder=\"MM-DD-YYYY\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">自定义格式</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test14\" placeholder=\"DD/MM/YYYY\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">一次绑定多个选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第一个</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput moredate\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第二个</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput moredate\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第三个</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput moredate\" placeholder=\"YYYY/MM/DD\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">DIV元素选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第一个</label>\r\n                <div class=\"jeinpbox\"><div class=\"jeindiv divmore\" placeholder=\"YYYY年MM月DD日\"></div></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第二个</label>\r\n                <div class=\"jeinpbox\"><div class=\"jeindiv divmore\" placeholder=\"YYYY-MM-DD\"></div></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">第三个</label>\r\n                <div class=\"jeinpbox\"><div class=\"jeindiv divmore\" placeholder=\"YYYY/MM/DD\"></div></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">左边多类选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">单面板选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"short\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">双面板选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"shortboth\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">YYYYMMDD格式</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">单面板选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"dateymd\" placeholder=\"YYYYMMDD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">双面板选择</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"dateymdboth\" placeholder=\"YYYYMMDD\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">其它功能展示选择</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">默认初始赋值</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test15\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">选中后的回调</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test16\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">日期切换的回调</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test17\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\" style=\"color:red;\">双击输入框触发</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test18\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">设置自定义值</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test19\" placeholder=\"YYYY-MM-DD\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">点击图标</label>\r\n                <div class=\"jeinpbox\">\r\n                    <input type=\"text\" class=\"jeinput\" id=\"testico\" placeholder=\"YYYY-MM-DD\">\r\n                    <div class=\"icons jebtns\" onclick=\"jeDate('#testico',{trigger:false,format: 'YYYY-MM-DD'})\"></div>\r\n                </div>\r\n                \r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">有效、无效日期限制</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">有效日期正向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test20\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">无效日期正向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test22\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">指定日期正向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test24\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">有效日期反向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test21\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">无效日期反向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test23\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n            <div class=\"jeitem\">\r\n                <label class=\"jelabel\">指定日期反向限制</label>\r\n                <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"test25\" placeholder=\"YYYY年MM月DD日\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"jewarp\">\r\n        <h3 class=\"gray\">直接展示日历</h3>\r\n        <div class=\"content\">\r\n            <div class=\"jefixeitem\" id=\"show01\"></div>\r\n            <div class=\"jefixeitem\" id=\"show02\"></div>\r\n            <div class=\"jefixeitem\" id=\"show03\"></div>\r\n            <div class=\"jefixeitem\" id=\"show04\"></div>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script type=\"text/javascript\" src=\"test/demo.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "params.json",
    "content": "{\n  \"name\": \"jeDate\",\n  \"version\": \"3.8\",\n  \"description\": \"jeDate日期选择插件除了包含 日历可以直接显示与点击显示、日期标注点、设定年月（YYYY-MM）、日期范围限制、开始日期设定、自定义日期格式、时间戳转换、当天的前后若干天返回、时分秒选择、智能响应、自动纠错、节日识别，操作等常规功能外，还拥有更多趋近完美的解决方案。您可以免费将她用于任何个人项目。但是不能去除头部信息。\",\n  \"main\": \"jedate/jquery.jedate.js\",\n  \"homepage\": \"https://github.com/singod/jeDate\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/singod/jeDate.git\"\n  },\n  \"keywords\": [\n    \"jeDate\",\n    \"jedate\",\n    \"jeDate日期选择插件\",\n    \"日期控件\",\n    \"javascript\"\n  ],\n  \"author\": \"guojun chen <249477145@qq.com> (http://www.jemui.com)\",\n  \"license\": {\n    \"type\": \"MIT\",\n    \"url\": \"http://www.jemui.com/license/\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/singod/jeDate/issues\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha-phantomjs index.html\",\n    \"start\": \"gulp watch\"\n  },\n  \"devDependencies\": {\n  }\n}\n"
  },
  {
    "path": "skin/jedate.css",
    "content": "/**\r\n @Name : jeDate V6.5.0 日期控件\r\n @Author: chen guojun\r\n @QQ群：516754269\r\n @官网：http://www.jemui.com/ 或 https://github.com/singod/jeDate\r\n */\r\n@font-face {font-family: \"jedatefont\";\r\n    src: url('jedatefont.eot?t=1510763148800'); /* IE9*/\r\n    src: url('jedatefont.eot?t=1510763148800#iefix') format('embedded-opentype'), /* IE6-IE8 */\r\n    url('jedatefont.woff?t=1510763148800') format('woff'),\r\n    url('jedatefont.ttf?t=1510763148800') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/\r\n    url('jedatefont.svg?t=1510763148800#jedatefont') format('svg'); /* iOS 4.1- */\r\n}\r\n  \r\n.jedatefont {font-family:\"jedatefont\" !important;font-style:normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;}\r\n.jedate{height:auto; font-family:'PingFangSC-Light','PingFang SC','Segoe UI','Lucida Grande','NotoSansHans-Light','Microsoft YaHei', '\\5FAE\\8F6F\\96C5\\9ED1', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif;font-size:12px; cursor:default;margin: 0;padding: 0;overflow: hidden;position: relative;border-radius:4px;display: inline-block;border: 1px solid #e2e2e2;box-shadow: 0 1px 6px rgba(0,0,0,.15);background-color:#fff;}\r\n.jedate *{margin: 0;padding: 0;list-style-type:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-style:normal;font-family:'PingFangSC-Light','PingFang SC','Segoe UI','Lucida Grande','NotoSansHans-Light','Microsoft YaHei', '\\5FAE\\8F6F\\96C5\\9ED1', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif;}\r\n\r\n.jedate table thead,.jedate table td{border: 1px #fff solid;}\r\n.jedate ul,.jedate ol,.jedate li,.jedate dl{list-style-type:none;font-style:normal;font-weight: 300;}\r\n\r\n.jedate .yearprev{left:0;font-size: 14px;}\r\n.jedate .monthprev{left:25px;font-size: 14px;}\r\n.jedate .yearnext{right:0;font-size: 14px;}\r\n.jedate .monthnext{right:25px;font-size: 14px;}\r\n.jedate .jedate-tips{position: absolute; top: 40%; left: 50%;z-index: 800; width: 200px; margin-left: -100px; line-height: 20px; padding: 15px; text-align: center; font-size: 12px; color: #ff0000;background-color: #FFFEF4;border: 1px rgb(247, 206, 57) solid;display: none;}\r\n.jedate .timecontent ul::-webkit-scrollbar,.jedate-menu::-webkit-scrollbar{height:6px;width:6px;margin-right:5px;background-color: #f5f5f5;transition:all 0.3s ease-in-out;border-radius:0px}\r\n.jedate .timecontent ul::-webkit-scrollbar-track,.jedate-menu::-webkit-scrollbar-track { -webkit-border-radius: 0px;border-radius: 0px;}\r\n.jedate .timecontent ul::-webkit-scrollbar-thumb,.jedate-menu::-webkit-scrollbar-thumb{-webkit-border-radius: 0px;border-radius: 0px;background: rgba(0,0,0,0.5); }\r\n.jedate .timecontent ul::-webkit-scrollbar-thumb:hover,.jedate-menu::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.6)}\r\n.jedate .timecontent ul::-webkit-scrollbar-thumb:active,.jedate-menu::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,0.8)}\r\n.jedate .timecontent ul::-webkit-scrollbar-thumb:window-inactive,.jedate-menu::-webkit-scrollbar-thumb:window-inactive {background: rgba(0,0,0,0.4);}\r\n.jedate .jedate-hmsmask{width:100%;display: block;background-color: rgba(0,0,0,.7);background-color:#fff;position: absolute;top: 0;left:0;right:0;bottom: 36px;z-index: 100;}\r\n.jedatetipscon{color:#333; float:left; overflow:hidden;background-color: #FFFEF4; line-height:22px;padding:6px;border: 1px rgb(247, 206, 57) solid;font-style:normal;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';font-size:12px;font-weight: 300;}\r\n.jedatetipscon p{padding: 0;margin: 0;font-size:12px;}\r\n.jedatetipscon p.red{color: #ff0000;}\r\n\r\n.jedate.leftmenu{padding-left: 90px;}\r\n.jedate .jedate-menu{width:90px;position: absolute;top: 0;left:0;bottom: 0;z-index: 10;background: #f2f2f2;border-right: 1px solid #efefef;border-radius: 4px 0 0 4px;overflow:auto;display: block;padding:4px 0;}\r\n.jedate .jedate-menu p{height: 30px;line-height: 30px;padding-left: 8px;overflow:hidden;font-size: 12px;cursor: pointer;}\r\n.jedate .jedate-menu p:hover{background-color: #00A680;color:#FFFFFF;}\r\n.jedate .jedate-wrap{min-width:230px;background: #fff;overflow: hidden;}\r\n.jedate .jedate-pane{width: 230px;float: left;overflow: hidden;}\r\n.jedate .jedate-header{width:100%;height:36px;line-height: 36px;float: left;background-color: #f2f2f2;text-align: center;font-size: 14px;padding: 0 50px;position: relative;}\r\n.jedate .jedate-header em{width:25px;height:36px;line-height: 36px;position:absolute;color: #666;top:0;background-repeat: no-repeat;background-position: center center;cursor: pointer;}\r\n.jedate .jedate-header .ymbtn{padding: 8px;border-radius: 4px;cursor:pointer;font-size: 14px;}\r\n/* .jedate .jedate-header em:hover,.jedate .jedate-header .ymbtn:hover{color: #00A680;} */\r\n.jedate .jedate-content{width:100%;height: 220px;float: left;padding: 5px;overflow: hidden;}\r\n.jedate .jedate-content.bordge{border-left: 1px #e9e9e9 solid;}\r\n.jedate .jedate-content .yeartable,.jedate .jedate-content .monthtable{width: 100%;border-collapse: collapse;border-spacing: 0;border: 1px solid #fff;}\r\n.jedate .jedate-content .yeartable td,.jedate .jedate-content .monthtable td{width:73px;height: 51px;line-height: 51px;text-align:center; position:relative; overflow:hidden;font-size: 14px;}\r\n.jedate .jedate-content .yeartable td span,.jedate .jedate-content .monthtable td span{padding: 8px 10px;border: 1px solid #fff;}\r\n.jedate .jedate-content .yeartable td.action span,.jedate .jedate-content .monthtable td.action span,\r\n.jedate .jedate-content .yeartable td.action span:hover,.jedate .jedate-content .monthtable td.action span:hover{background-color:#00A680;border:1px #00A680 solid;color:#fff;}\r\n.jedate .jedate-content .yeartable td span:hover,.jedate .jedate-content .monthtable td span:hover{background-color:#f2f2f2;border: 1px #f2f2f2 solid;}\r\n.jedate .jedate-content .yeartable td.disabled span,.jedate .jedate-content .monthtable td.disabled span,\r\n.jedate .jedate-content .yeartable td.disabled span:hover,.jedate .jedate-content .monthtable td.disabled span:hover{color:#bbb;background-color:#fff;border: 1px solid #fff;}\r\n.jedate .jedate-content .yeartable td.contain span,.jedate .jedate-content .monthtable td.contain span,\r\n.jedate .jedate-content .yeartable td.contain span:hover,.jedate .jedate-content .monthtable td.contain span:hover{background-color: #D0F0E3;border:1px #D0F0E3 solid;}\r\n\r\n.jedate.grid .daystable thead,.jedate.grid .daystable td{border: 1px #f2f2f2 solid;}\r\n.jedate .jedate-content .daystable{width: 100%;border-collapse: collapse;border-spacing: 0;border: 1px solid #fff;}\r\n.jedate .jedate-content .daystable thead{background-color:#fff;}\r\n.jedate .jedate-content .daystable th{width:31px;height:27px;  text-align:center; position:relative; overflow:hidden;font-size: 12px;font-weight: 400;}\r\n.jedate .jedate-content .daystable td{width:31px;height:30px;  text-align:center; position:relative; overflow:hidden;font-size: 14px;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';}\r\n.jedate .jedate-content .daystable td .nolunar{line-height:29px;font-size: 14px;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';}\r\n.jedate .jedate-content .daystable td .solar{height:14px;line-height:14px;font-size: 14px;padding-top: 2px;display: block;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';}\r\n.jedate .jedate-content .daystable td .lunar{height:15px;line-height:15px;font-size: 12px;overflow:hidden;display: block;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';color: #888;transform: scale(.95);}\r\n.jedate .jedate-content .daystable td.action,.jedate .jedate-content .daystable td.action:hover,\r\n.jedate .jedate-content .daystable td.action .lunar{background-color: #00A680;color:#fff;}\r\n.jedate .jedate-content .daystable td.other,.jedate .jedate-content .daystable td.other .nolunar,.jedate .jedate-content .daystable td.other .lunar{color:#00DDAA;}\r\n.jedate .jedate-content .daystable td.disabled,.jedate .jedate-content .daystable td.disabled .nolunar,.jedate .jedate-content .daystable td.disabled .lunar{ color:#bbb;}\r\n.jedate .jedate-content .daystable td.contain,.jedate .jedate-content .daystable td.contain:hover{background-color: #00DDAA;color:#fff;}\r\n.jedate .jedate-content .daystable td.disabled:hover{background-color:#fff;}\r\n.jedate .jedate-content .daystable td:hover{background-color:#f2f2f2;}\r\n.jedate .jedate-content .daystable td.red{ color:#ff0000;}\r\n.jedate .jedate-content .daystable td .marks{ width:5px; height:5px; background-color:#ff0000; -webkit-border-radius:50%;border-radius:50%; position:absolute; right:2px; top:4px;}\r\n.jedate .jedate-content .daystable td.action .marks{ width:5px; height:5px; background-color:#fff; -webkit-border-radius:50%;border-radius:50%; position:absolute; right:2px; top:4px;}\r\n\r\n.jedate .jedate-time{overflow: hidden;padding-bottom: 4px; background-color:#fff;position: absolute;top:0;right: 0;z-index: 150;}\r\n.jedate .jedate-time .timepane{width:230px;float:left;}\r\n.jedate .jedate-time .timeheader{width: 100%;float:left;height: 36px;line-height: 36px;background-color: #f2f2f2;text-align: center;font-size: 14px;position: relative;}\r\n.jedate .jedate-time .timecontent{width: 100%;float:left;}\r\n.jedate .jedate-time .hmstitle{width: 211px;margin: 0 auto;overflow: hidden;padding-top: 4px;text-align: center;}\r\n.jedate .jedate-time .hmstitle p{width: 33.33%;float:left;height: 30px;line-height: 30px;font-size: 13px;}\r\n.jedate .jedate-time .hmslist{width: 211px;margin: 0 auto 6px auto;border: 1px solid #ddd;border-right: none;overflow: hidden;}\r\n.jedate .jedate-time .hmslist .hmsauto{height: 100%;margin: 0;text-align: center;}\r\n.jedate .jedate-time .hmslist ul {width: 70px;height: 174px;float: left;border-right: 1px solid #ddd;overflow: hidden;}\r\n.jedate .jedate-time .hmslist .hmsauto:hover ul {overflow-y: auto}\r\n.jedate .jedate-time .hmslist ul li {width: 130%;padding-left:26px;text-align: left;height: 25px;line-height: 25px;font-size: 14px;font-family: Arial, \"\\5b8b\\4f53\", 'sans-serif';}\r\n.jedate .jedate-time .hmslist ul li:hover{background-color: #F2F2F2;}\r\n.jedate .jedate-time .hmslist ul li.action,.jedate-time .hmslist ul li.action:hover{background-color: #00A680;color:#fff;}\r\n.jedate .jedate-time .hmslist ul li.disabled{ background-color: #fbfbfb;color:#ccc;}\r\n.jedate .jedate-time .hmslist ul li.disabled.action{ background-color: #00A680;color:#FFFFFF;filter:Alpha(opacity=30);opacity:.3; }\r\n\r\n.jedate .jedate-footbtn{height: 36px;padding: 0 6px;border-top: 1px #e9e9e9 solid;overflow: hidden;}\r\n.jedate .jedate-footbtn .timecon{line-height:28px;padding:0 5px;background-color:#00A680;color:#fff;display:block;float: left;font-size: 12px;margin-top:4px;border-radius:4px;overflow: hidden;}\r\n.jedate .jedate-footbtn .btnscon{line-height:28px;margin-top:4px;display:block;float: right;font-size: 12px;border-radius:4px;overflow: hidden;}\r\n.jedate .jedate-footbtn .btnscon span{float:left; padding:0 5px;border-right: 1px #fff solid;background-color:#00A680;color:#fff;display:block;height:28px;line-height:28px;text-align:center;overflow:hidden;}\r\n.jedate .jedate-footbtn .btnscon span:last-child{border-right:none;}"
  },
  {
    "path": "src/jedate.js",
    "content": "/**\r\n @Name : jeDate v6.5.0 日期控件\r\n @Author: chen guojun\r\n @Date: 2018-04-30\r\n @QQ群：516754269\r\n @官网：http://www.jemui.com/ 或 https://github.com/singod/jeDate\r\n */\r\n;(function(window, factory) {\r\n    //amd\r\n    if (typeof define === 'function' && define.amd) {\r\n        define(factory);\r\n    } else if (typeof exports === 'object') { //umd\r\n        module.exports = factory();\r\n    } else {\r\n        window.jeDate = factory();\r\n    }\r\n})(this, function() {    \r\n    var doc = document, win = window;\r\n    var jet = {}, doc = document, regymdzz = \"YYYY|MM|DD|hh|mm|ss|zz\", gr = /\\-/g,\r\n        regymd = \"YYYY|MM|DD|hh|mm|ss|zz\".replace(\"|zz\",\"\"), parseInt = function (n) { return window.parseInt(n, 10);};\r\n    var $Q = function (selector,content) {\r\n        content = content || document;\r\n        return selector.nodeType ? selector : content.querySelector(selector);\r\n    };\r\n    var jeDate = function(elem,options){\r\n        var opts = typeof (options) === \"function\" ? options() : options;\r\n        return new jeDatePick(elem,opts);\r\n    };\r\n    //日期控件版本\r\n    jeDate.dateVer = \"V6.5.0\";\r\n    //用一个或多个其他对象来扩展一个对象，返回被扩展的对象\r\n    jeDate.extend = jet.extend = function () {\r\n        var options, name, src, copy,deep = false, target = arguments[0], i = 1, length = arguments.length;\r\n        if (typeof (target) === \"boolean\") deep = target, target = arguments[1] || {}, i = 2;\r\n        if (typeof (target) !== \"object\" && typeof (target) !== \"function\") target = {};\r\n        if (length === i) target = this, --i;\r\n        for (; i < length; i++) {\r\n            if ((options = arguments[i]) != null) {\r\n                for (name in options) {\r\n                    src = target[name], copy = options[name];\r\n                    if (target === copy) continue;\r\n                    if (copy !== undefined) target[name] = copy;\r\n                }\r\n            }\r\n        }\r\n        return target;\r\n    };\r\n    //返回指定日期\r\n    jeDate.nowDate = function (val,format) {\r\n        format = format || 'YYYY-MM-DD hh:mm:ss';\r\n        if (!isNaN(val)) val = {DD: val};\r\n        return jet.parse(jet.getDateTime(val),format);\r\n    };\r\n    //日期转换\r\n    jeDate.convert = function (obj) {\r\n        obj.format = obj.format || 'YYYY-MM-DD hh:mm:ss';\r\n        obj.addval = obj.addval || [];\r\n        var mats = jet.reMatch(obj.format),objVal = {};\r\n        jet.each(jet.reMatch(obj.val),function (i,cval) {\r\n            objVal[mats[i]] = parseInt(cval);\r\n        });\r\n        var result = new DateTime(obj.addval,objVal), redate = { \r\n            YYYY:result.GetYear(), MM:result.GetMonth(), DD:result.GetDate(),\r\n            hh:result.GetHours(), mm:result.GetMinutes(), ss:result.GetSeconds()\r\n        };\r\n        return redate;\r\n    };\r\n    jeDate.valText = function (elem,value) {\r\n        return jet.valText(elem,value);     \r\n    }\r\n    //日期时间戳相互转换\r\n    jeDate.timeStampDate = function (date,format) {\r\n        format = format || 'YYYY-MM-DD hh:mm:ss';\r\n        var dateTest = (/^(-)?\\d{1,10}$/.test(date) || /^(-)?\\d{1,13}$/.test(date));\r\n        if(/^[1-9]*[1-9][0-9]*$/.test(date) && dateTest){\r\n            var vdate = parseInt(date);\r\n            if (/^(-)?\\d{1,10}$/.test(vdate)) {\r\n                vdate = vdate * 1000;\r\n            } else if (/^(-)?\\d{1,13}$/.test(vdate)) {\r\n                vdate = vdate * 1000;\r\n            } else if (/^(-)?\\d{1,14}$/.test(vdate)) {\r\n                vdate = vdate * 100;\r\n            } else {\r\n                alert(\"时间戳格式不正确\");\r\n                return;\r\n            }\r\n            var setdate = new Date(vdate);\r\n            return jet.parse({\r\n                YYYY:setdate.getFullYear(), MM:jet.digit(setdate.getMonth()+1), DD:jet.digit(setdate.getDate()) , \r\n                hh:jet.digit(setdate.getHours()), mm:jet.digit(setdate.getMinutes()), ss:jet.digit(setdate.getSeconds()) \r\n            }, format);\r\n        }else {\r\n            //将日期转换成时间戳\r\n            var arrs = jet.reMatch(date),\r\n                newdate = new Date(arrs[0],arrs[1]-1,arrs[2],arrs[3]||0,arrs[4]||0,arrs[5]||0),\r\n                timeStr = Math.round(newdate.getTime() / 1000);\r\n            return timeStr;\r\n        }\r\n    };\r\n    //获取年月日星期\r\n    jeDate.getLunar = function(obj){\r\n        //如果为数字类型的日期对获取到日期的进行替换\r\n        var lunars = jeLunar(obj.YYYY, parseInt(obj.MM) - 1, obj.DD);\r\n        return{\r\n            nM: lunars.lnongMonth,              //农历月\r\n            nD: lunars.lnongDate,               //农历日\r\n            cY: parseInt(lunars.solarYear),     //阳历年\r\n            cM: parseInt(lunars.solarMonth),    //阳历月\r\n            cD: parseInt(lunars.solarDate),     //阳历日\r\n            cW: lunars.inWeekDays,              //汉字星期几\r\n            nW: lunars.solarWeekDay             //数字星期几\r\n        };\r\n    };\r\n    //转换日期格式\r\n    jeDate.parse = jet.parse = function(ymdhms, format) {\r\n        return format.replace(new RegExp(regymdzz,\"g\"), function(str, index) {\r\n            return str == \"zz\" ? \"00\":jet.digit(ymdhms[str]);\r\n        });\r\n    }\r\n    //返回日期\r\n    function DateTime(arr,valObj) {\r\n        var that = this,newdate = new Date(), narr = [\"FullYear\",\"Month\",\"Date\",\"Hours\",\"Minutes\",\"Seconds\"]; \r\n        var vb = jet.extend({YYYY:null,MM:null,DD:null,hh:newdate.getHours(),mm:newdate.getMinutes(),ss:newdate.getSeconds()},valObj);\r\n        var ND = valObj == undefined ? newdate : new Date(vb.YYYY,vb.MM,vb.DD,vb.hh,vb.mm,vb.ss);\r\n        if((arr||[]).length>0) jet.each(arr,function (i,par) { \r\n            ND[\"set\"+narr[i]](narr[i] == \"Month\" ? parseInt(par)-1:parseInt(par)); \r\n        });\r\n        //返回一个数值相同的新DateTime对象 \r\n        that.reDate = function () {\r\n            return new DateTime();\r\n        };\r\n        //返回此实例的Date值 \r\n        that.GetValue = function () {\r\n            return ND;\r\n        };\r\n        //获取此实例所表示日期的年份部分。 \r\n        that.GetYear = function () {\r\n            return ND.getFullYear();\r\n        };\r\n        //获取此实例所表示日期的月份部分。 \r\n        that.GetMonth = function () {\r\n            return ND.getMonth() + 1;\r\n        };\r\n        //获取此实例所表示的日期为该月中的第几天。 \r\n        that.GetDate = function () {\r\n            return ND.getDate();\r\n        };\r\n        //获取此实例所表示日期的小时部分。 \r\n        that.GetHours = function () {\r\n            return ND.getHours();\r\n        };\r\n        //获取此实例所表示日期的分钟部分。 \r\n        that.GetMinutes = function () {\r\n            return ND.getMinutes();\r\n        };\r\n        //获取此实例所表示日期的秒部分。 \r\n        that.GetSeconds = function () {\r\n            return ND.getSeconds();\r\n        };\r\n    };\r\n\r\n    jet.extend(jet,{\r\n        isType : function (obj,type) {\r\n            var firstUper = function (str) {\r\n                str = str.toLowerCase();\r\n                return str.replace(/\\b(\\w)|\\s(\\w)/g, function (m) {\r\n                    return m.toUpperCase();\r\n                });\r\n            }\r\n            return Object.prototype.toString.call(obj) == \"[object \" + firstUper(type) + \"]\";\r\n        },\r\n        each : function (obj, callback, args) {\r\n            var name, i = 0, length = obj.length, iselem = (length === undefined || obj === \"function\");\r\n            if (iselem) {\r\n                for (name in obj) { if (callback.call(obj[name], name, obj[name]) === false) { break } }\r\n            } else {\r\n                for (; i < length;) { if (callback.call(obj[i], i, obj[i++]) === false) { break } }\r\n            }            \r\n            return obj;\r\n        },\r\n        on : function (elm, type, fn) {\r\n            if (elm.addEventListener) {\r\n                elm.addEventListener(type, fn, false);//DOM2.0\r\n                return true;\r\n            }else if (elm.attachEvent) {\r\n                return elm.attachEvent(\"on\" + type, fn);//IE5+\r\n            }else {\r\n                elm[\"on\" + type] = fn;//DOM 0\r\n            }\r\n        },\r\n        isObj : function (obj){\r\n            for(var i in obj){return true;}\r\n            return false;\r\n        },\r\n        trim : function (str){ return str.replace(/(^\\s*)|(\\s*$)/g, \"\"); }, \r\n        reMatch : function (str) {\r\n            var smarr = [],maStr = \"\", parti = /(^\\w{4}|\\w{2}\\B)/g;\r\n            if(jet.isNum(str)){\r\n                maStr =  str.replace(parti,\"$1-\");\r\n            }else{\r\n                maStr = /^[A-Za-z]+$/.test(str) ? str.replace(parti,\"$1-\") : str;   \r\n            }\r\n            jet.each(maStr.match(/\\w+|d+/g),function (i,val) {\r\n                smarr.push(jet.isNum(val) ? parseInt(val):val);\r\n            });\r\n            return smarr;\r\n        },\r\n        equals : function (arrA,arrB) {\r\n            if (!arrB) return false;\r\n            if (arrA.length != arrB.length) return false;\r\n            for (var i = 0, l = arrA.length; i < l; i++) {\r\n                if (arrA[i] instanceof Array && arrB[i] instanceof Array) {\r\n                    if (!arrA[i].equals(arrB[i])) return false;\r\n                } else if (arrA[i] != arrB[i]) {\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        },\r\n        docScroll : function(type) {\r\n            type = type ? \"scrollLeft\" :\"scrollTop\";\r\n            return document.body[type] | document.documentElement[type];\r\n        },\r\n        docArea : function(type) {\r\n            return document.documentElement[type ? \"clientWidth\" :\"clientHeight\"];\r\n        },\r\n        //补齐数位\r\n        digit : function(num) {\r\n            return num < 10 ? \"0\" + (num | 0) :num;\r\n        },\r\n        //判断是否为数字\r\n        isNum : function(value){\r\n            return /^[+-]?\\d*\\.?\\d*$/.test(value) ? true : false;\r\n        },\r\n        //获取本月的总天数\r\n        getDaysNum : function(y, m) {\r\n            var num = 31,isLeap = (y % 100 !== 0 && y % 4 === 0) || (y % 400 === 0);\r\n            switch (parseInt(m)) {\r\n                case 2: num = isLeap ? 29 : 28; break;\r\n                case 4: case 6: case 9: case 11: num = 30; break;\r\n            }\r\n            return num;\r\n        },\r\n        //获取月与年\r\n        getYM : function(y, m, n) {\r\n            var nd = new Date(y, m - 1);\r\n            nd.setMonth(m - 1 + n);\r\n            return {\r\n                y: nd.getFullYear(),\r\n                m: nd.getMonth() + 1\r\n            };\r\n        },\r\n        //获取上个月\r\n        prevMonth : function(y, m, n) {\r\n            return jet.getYM(y, m, 0 - (n || 1));\r\n        },\r\n        //获取下个月\r\n        nextMonth : function(y, m, n) {\r\n            return jet.getYM(y, m, n || 1);\r\n        },\r\n        setCss:function(elem,obj) {\r\n            for (var x in obj) elem.style[x] = obj[x];\r\n        },\r\n        html : function (elem,html) {\r\n            return typeof html === \"undefined\" ? elem && elem.nodeType === 1 ? elem.innerHTML :undefined :typeof html !== \"undefined\" && html == true ? elem && elem.nodeType === 1 ? elem.outerHTML :undefined : elem.innerHTML = html;\r\n                \r\n        },\r\n        // 读取设置节点文本内容\r\n        text : function(elem,value) {\r\n            var innText = document.all ? \"innerText\" :\"textContent\";\r\n            return typeof value === \"undefined\" ? elem && elem.nodeType === 1 ? elem[innText] :undefined : elem[innText] = value;\r\n        },\r\n        //设置值\r\n        val : function (elem,value) {\r\n            if (typeof value === \"undefined\") {\r\n                return elem && elem.nodeType === 1 && typeof elem.value !== \"undefined\" ? elem.value :undefined;\r\n            }\r\n            // 将value转化为string\r\n            value = value == null ? \"\" :value + \"\";\r\n            elem.value = value;\r\n        },\r\n        attr : function(elem,value){\r\n            return elem.getAttribute(value);\r\n        },\r\n        hasClass : function (obj, cls) {\r\n            return obj.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n        },\r\n        stopPropagation : function (ev) { \r\n            (ev && ev.stopPropagation) ? ev.stopPropagation() : window.event.cancelBubble = true;  \r\n        },\r\n        template : function (str, data) {\r\n            var strCell = !/[^\\w\\-\\.:]/.test(str) ? document.getElementById(str).innerHTML : str;\r\n            var keys = function (obj){\r\n                var arr = [];\r\n                for(arr[arr.length] in obj);\r\n                return arr ;\r\n            }, dataVar = function (obj) {\r\n                var vars = ''; \r\n                for (var key in obj) {\r\n                    vars += 'var ' + key + '= $D[\"' + key + '\"];';\r\n                }\r\n                return vars;\r\n            }, compile = function (source,data) {\r\n                var code = \"var $out='\" + source.replace(/[\\r\\n]/g, '').replace(/^(.+?)\\{\\%|\\%\\}(.+?)\\{\\%|\\%\\}(.+?)$/g, function (val) {\r\n                        return val.replace(/(['\"])/g, '\\\\\\$1');\r\n                    }).replace(/\\{\\%\\s*=\\s*(.+?)\\%\\}/g, \"';$out+=$1;$out+='\").replace(/\\{\\%(.+?)\\%\\}/g, \"';$1;$out+='\") + \"';return new String($out);\";\r\n                var vars = dataVar(data), Render = new Function('$D',vars + code);\r\n                return new Render(data) + '';\r\n            };\r\n            return compile(strCell,data);\r\n        },\r\n        \r\n        //判断元素类型\r\n        isValDiv : function(elem) {\r\n            return /textarea|input/.test(elem.tagName.toLocaleLowerCase());\r\n        },\r\n        valText : function (elem,value) {\r\n            var cell = $Q(elem) ,type = jet.isValDiv(cell) ? \"val\" : \"text\";\r\n            if(value != undefined){\r\n                jet[type](cell,value);  \r\n            }else{\r\n                return jet[type](cell);\r\n            }       \r\n        },\r\n        isBool : function(obj){  return (obj == undefined || obj == true ?  true : false); },\r\n        //获取返回的日期\r\n        getDateTime : function (obj) {\r\n            var result = new DateTime(), objVal = jet.extend({YYYY:null,MM:null,DD:null,hh:0,mm:0,ss:0},obj),\r\n                matArr = {YYYY:\"FullYear\",MM:\"Month\",DD:\"Date\",hh:\"Hours\",mm:\"Minutes\",ss:\"Seconds\"};\r\n            jet.each([\"ss\",\"mm\",\"hh\",\"DD\",\"MM\",\"YYYY\"],function (i,mat) {\r\n                if (!jet.isNum(parseInt(objVal[mat]))) return null;\r\n                var reVal = result.GetValue();\r\n                if (parseInt(objVal[mat]) || parseInt(objVal[mat]) == 0){\r\n                    reVal[\"set\"+matArr[mat]](result[\"Get\"+matArr[mat]]() + (mat == \"MM\" ? -1 : 0) + parseInt(objVal[mat]));\r\n                }\r\n            });\r\n            //获取格式化后的日期\r\n            var redate = { \r\n                YYYY:result.GetYear(), MM:result.GetMonth(), DD:result.GetDate(),\r\n                hh:result.GetHours(), mm:result.GetMinutes(), ss:result.GetSeconds()\r\n            };\r\n            return redate;\r\n        }\r\n    });\r\n\r\n    function jeDatePick(elem, options){\r\n        var config = {\r\n            language:{\r\n                name   : \"cn\",\r\n                month  : [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"],\r\n                weeks  : [ \"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\" ],\r\n                times  : [\"小时\",\"分钟\",\"秒数\"],\r\n                timetxt: [\"时间选择\",\"开始时间\",\"结束时间\"],\r\n                backtxt:\"返回日期\",\r\n                clear  : \"清空\",\r\n                today  : \"现在\",\r\n                yes    : \"确定\"\r\n            },\r\n            format:\"YYYY-MM-DD hh:mm:ss\",               //日期格式\r\n            minDate:\"1900-01-01 00:00:00\",              //最小日期\r\n            maxDate:\"2099-12-31 23:59:59\",              //最大日期\r\n            isShow:true,                                //是否显示为固定日历，为false的时候固定显示\r\n            multiPane:true,                             //是否为双面板，为false是展示双面板\r\n            onClose:true,                               //是否为选中日期后关闭弹层，为false时选中日期后关闭弹层\r\n            range:false,                                //如果不为空且不为false，则会进行区域选择，例如 \" 至 \"，\" ~ \"，\" To \"\r\n            trigger:\"click\",                            //是否为内部触发事件，默认为内部触发事件\r\n            position:[],                                //自定义日期弹层的偏移位置，长度为0，弹层自动查找位置\r\n            valiDate:[],                                //有效日期与非有效日期，例如 [\"0[4-7]$,1[1-5]$,2[58]$\",true]\r\n            isinitVal:false,                            //是否初始化时间，默认不初始化时间\r\n            initDate:{},                                //初始化时间，加减 天 时 分\r\n            isTime:true,                                //是否开启时间选择\r\n            isClear:true,                               //是否显示清空按钮\r\n            isToday:true,                               //是否显示今天或本月按钮\r\n            isYes:true,                                 //是否显示确定按钮\r\n            festival:false,                             //是否显示农历节日\r\n            fixed:true,                                 //是否静止定位，为true时定位在输入框，为false时居中定位\r\n            zIndex:2099,                                //弹出层的层级高度\r\n            method:{},                                 //自定义方法                \r\n            theme:{},                                   //自定义主题色\r\n            shortcut:[],                                //日期选择的快捷方式\r\n            donefun:null,                                //选中日期完成的回调\r\n            before:null,                                //在界面加载之前执行\r\n            succeed:null                                //在界面加载之后执行  \r\n        };\r\n        this.$opts = jet.extend(config,options||{});\r\n        this.valCell = $Q(elem); \r\n        this.format = this.$opts.format;\r\n        this.valCell != null ? this.init() : alert(elem+\"  ID\\u6216\\u7C7B\\u540D\\u4E0D\\u5B58\\u5728!\");\r\n        jet.extend(this,this.$opts.method);\r\n        delete this.$opts.method;\r\n    }\r\n    var searandom = function (){\r\n        var str = \"\",arr = [1,2,3,4,5,6,7,8,9,0];\r\n        for(var i=0; i<8; i++) str += arr[Math.round(Math.random() * (arr.length-1))];\r\n        return str;\r\n    };\r\n\r\n    var jefix = \"jefixed\",ymdzArr = jet.reMatch(regymdzz),elx = \"#jedate\";\r\n    jet.extend(jeDatePick.prototype,{\r\n        init : function () {  \r\n            var that = this, opts = that.$opts, newDate = new Date(), shortArr = [],\r\n                trigges = opts.trigger,ndate = opts.initDate || [], inVal, range = opts.range,\r\n                zIndex = opts.zIndex == undefined ? 10000 : opts.zIndex,isShow = jet.isBool(opts.isShow),\r\n                isinitVal = (opts.isinitVal == undefined || opts.isinitVal == false) ? false : true;\r\n            that.setDatas();\r\n            opts.before && opts.before(that.valCell);\r\n            //为开启初始化的时间设置值\r\n            if (isinitVal && trigges && isShow) {   \r\n                if (ndate[1]){\r\n                    var addval = jet.getDateTime(ndate[0]);\r\n                    inVal = [{\r\n                        YYYY:addval.YYYY, MM:jet.digit(addval.MM), DD:jet.digit(addval.DD) , \r\n                        hh:jet.digit(addval.hh), mm:jet.digit(addval.mm), ss:jet.digit(addval.ss) \r\n                    }];\r\n                }else {\r\n                    inVal = that.getValue(jet.isObj(ndate[0]) ? ndate[0] : {});\r\n                }\r\n                if(!range) that.setValue([inVal[0]],opts.format,true);\r\n            }\r\n\r\n            var getCurrValue = function () {\r\n                var mats = jet.reMatch(that.format), isEmpty = that.getValue() != \"\",curVal = [],\r\n                    parmat = that.dlen == 7 ? \"hh:mm:ss\" : \"YYYY-MM\"+ (that.dlen <= 2 ? \"\":\"-DD\");\r\n                \t\t\t\t\tvar result = that.valCell.value;\r\n                      if (!result) {\r\n                       that.selectValue = [jet.parse(jet.getDateTime({}), parmat)];\r\n                      } else {\r\n                       result = result.substr(0,11);\r\n                       var nowTime = [jet.parse(jet.getDateTime({}), parmat)];\r\n                       nowTime = nowTime[0];\r\n                       var time1 = new Date(result).setHours('0');\r\n                       var time2 = new Date(nowTime).setHours('0');\r\n                       var nDays = (parseInt((time1 - time2) / 1000 / 3600 / 24));\r\n                       var redate = {\r\n                        DD: nDays\r\n                       };\r\n                       that.selectValue = [jet.parse(jet.getDateTime(redate), parmat)];\r\n                      }\r\n                // that.selectValue = that.selectValue && that.selectValue.length > 0 ? that.selectValue :  [jet.parse(jet.getDateTime({}), parmat)];\r\n \r\n                if(isEmpty && isShow){\r\n                    var getVal = that.getValue().split(range);\r\n                    jet.each(new Array(range ? 2 : 1),function (a) {\r\n                        curVal[a] = {};\r\n                        jet.each(jet.reMatch(getVal[a]),function (i,val) {\r\n                            curVal[a][mats[i]] = parseInt(val);\r\n                        });\r\n                    });\r\n                    if(range) that.selectValue = getVal;\r\n                }else{\r\n                    var parr = that.getValue({})[0], nmVal = jet.nextMonth(parr.YYYY,parr.MM||jet.getDateTime({}).MM),\r\n                        narr = (that.dlen>2 && that.dlen <=6) ? {YYYY:nmVal.y,MM:nmVal.m} : {};\r\n                    curVal = [parr];\r\n                }\r\n                that.selectDate = curVal;\r\n                return curVal;\r\n            },ymarr = [];\r\n            that.minDate = \"\"; that.maxDate = \"\";\r\n            if(!isShow || !trigges) ymarr = getCurrValue();\r\n            if(!isShow || !trigges){  \r\n                that.minDate = jet.isType(opts.minDate,\"function\") ? opts.minDate(that) : opts.minDate;\r\n                that.maxDate = jet.isType(opts.maxDate,\"function\") ? opts.maxDate(that) : opts.maxDate;\r\n                that.storeData(ymarr[0],ymarr[1]);\r\n                that.renderDate();\r\n                opts.succeed && opts.succeed(that.dateCell);\r\n            }else{\r\n                if (trigges) {\r\n                    jet.on(that.valCell,trigges,function(){\r\n                        if (document.querySelectorAll(elx).length > 0) return;\r\n                        var gvarr = getCurrValue();\r\n                        that.minDate = jet.isType(opts.minDate,\"function\") ? opts.minDate(that) : opts.minDate;\r\n                        that.maxDate = jet.isType(opts.maxDate,\"function\") ? opts.maxDate(that) : opts.maxDate;\r\n                        that.storeData(gvarr[0],gvarr[1]);\r\n                        that.renderDate();\r\n                    });\r\n                }\r\n            }        \r\n        },\r\n        setDatas : function(){\r\n            var that = this, opts = that.$opts,range = opts.range,shortArr = [],isShow = jet.isBool(opts.isShow),multi = opts.multiPane;\r\n            that.$data = jet.extend({year:false,month:false,day:true,time:false,timebtn:false},{\r\n                shortcut:[],lang:opts.language,yaerlist:[],monthlist:[[],[]],ymlist:[[],[]], daylist:[[],[]],\r\n                clear:opts.isClear,today:range ? false:opts.isToday,yes:opts.isYes,pane:multi ? 1:2\r\n            });\r\n            if(opts.shortcut.length>0){\r\n                jet.each(opts.shortcut,function (i,short) {  \r\n                    var tarr = [], shval = jet.isType(short.val,\"function\") ? short.val() : short.val;\r\n                    if(jet.isType(shval,\"object\")){ \r\n                        for (var s in shval) tarr.push(s + ':' + shval[s]);\r\n                        shortArr.push(jet.extend({},{name:short.name,val:\"{\" + tarr.join('#') + \"}\"}));\r\n                    } \r\n                });\r\n                that.$data.shortcut = shortArr;\r\n            }\r\n            that.dlen = (function () {\r\n                var mats = jet.reMatch(that.format),marr = [];\r\n                jet.each(ymdzArr,function(i,val){\r\n                    jet.each(mats,function(m,mval){\r\n                        if(val == mval) marr.push(mval);\r\n                    });\r\n                });\r\n                var matlen = marr.length, lens = (marr[0] == \"hh\")&&matlen<=3 ? 7 : matlen;\r\n                return lens;\r\n            })();\r\n            that.$data.dlen = that.dlen;\r\n            that.timeInspect = false;\r\n            if(that.dlen == 1){\r\n                jet.extend(that.$data,{year:true,day:false});\r\n            }else if(that.dlen == 2){\r\n                jet.extend(that.$data,{month:true,day:false});\r\n            }else if(that.dlen>3 && that.dlen <=6){\r\n                that.$data.timebtn = true;\r\n            }else if(that.dlen == 7){\r\n                jet.extend(that.$data,{day:false,time:true});\r\n            }\r\n            if(!isShow){\r\n                that.$data.clear = false;\r\n                that.$data.yes = false;\r\n            }\r\n        },\r\n        renderDate : function () {\r\n            var that= this, opts = that.$opts,isShow = jet.isBool(opts.isShow),\r\n                elxID = !isShow ? elx+searandom() : elx, setzin = {\"zIndex\":  (opts.zIndex == undefined ? 10000 : opts.zIndex)};  \r\n            if(that.dateCell == undefined){   \r\n                that.dateCell = document.createElement(\"div\");  \r\n                that.dateCell.id = elxID.replace(/\\#/g,\"\");\r\n                that.dateCell.className = elx.replace(/\\#/g,\"\")+\" \"+(opts.shortcut.length>0?\" leftmenu\":\"\");\r\n                that.dateCell.setAttribute(\"author\",\"chen guojun\"); \r\n            }\r\n            jet.html(that.dateCell,jet.template(that.dateTemplate(),that.$data));\r\n            //自定义主题色\r\n            if(jet.isObj(opts.theme)){   \r\n                var styleDiv = document.createElement(\"style\"),stCell = \".jedate\"+searandom(), t = opts.theme, \r\n                    BG = \"background-color:\"+t.bgcolor, WC = \"color:\"+(t.color == undefined ? \"#FFFFFF\":t.color),\r\n                    OTH = (t.pnColor == undefined ? \"\":\"color:\"+t.pnColor+\";\");\r\n                that.dateCell.className = that.dateCell.className+\" \"+stCell.replace(/^./g,\"\"); styleDiv.setAttribute(\"type\",\"text/css\");\r\n                styleDiv.innerHTML = stCell+\" .jedate-menu p:hover{\"+BG+\";\"+WC+\";}\"+stCell+\" .jedate-header em{\"+WC+\";}\"+\r\n                stCell+\" .jedate-content .yeartable td.action span,\"+stCell+\" .jedate-content .monthtable td.action span,\"+\r\n                stCell+\" .jedate-content .yeartable td.action span:hover,\"+stCell+\" .jedate-content .monthtable td.action span:hover{\"+BG+\";border:1px \"+t.bgcolor+\" solid;\"+WC+\";}\"+stCell+\" .jedate-content .daystable td.action,\"+stCell+\" .jedate-content .daystable td.action:hover,\"+\r\n                stCell+\" .jedate-content .daystable td.action .lunar,\"+stCell+\" .jedate-header,\"+stCell+\" .jedate-time .timeheader,\"+\r\n                stCell+\" .jedate-time .hmslist ul li.action,\"+stCell+\" .jedate-time .hmslist ul li.action:hover,\"+\r\n                stCell+\" .jedate-time .hmslist ul li.disabled.action,\"+stCell+\" .jedate-footbtn .timecon,\"+stCell+\" .jedate-footbtn .btnscon span{\"+BG+\";\"+WC+\";}\"+\r\n                stCell+\" .jedate-content .daystable td.other,\"+stCell+\" .jedate-content .daystable td.other .nolunar,\"+stCell+\" .jedate-content .daystable td.other .lunar{\"+OTH+\"}\"+stCell+\" .jedate-content .daystable td.contain,\"+stCell+\" .jedate-content .daystable td.contain:hover{background-\"+OTH+\"}\";\r\n                that.dateCell.appendChild(styleDiv);\r\n            }\r\n            \r\n            that.compileBindNode(that.dateCell); \r\n            if (document.querySelectorAll(elxID).length > 0) document.body.removeChild($Q(elxID));\r\n            !isShow ? that.valCell.appendChild(that.dateCell) : document.body.appendChild(that.dateCell);\r\n            jet.setCss(that.dateCell,jet.extend({position:(!isShow ? \"relative\" : (opts.fixed == true ? \"absolute\" :\"fixed\"))},isShow ? setzin:{}));\r\n            that.methodEventBind();\r\n            if(that.dlen == 7 || (that.dlen>3 && that.dlen <=6)) that.locateScroll();\r\n            if(opts.festival && opts.language.name == \"cn\") that.showFestival();\r\n            if(isShow){ \r\n                that.dateOrien(that.dateCell,that.valCell);  \r\n                that.blankArea(); \r\n            }\r\n            \r\n        },\r\n        //设置日期值\r\n        setValue : function (fnStr,matStr,bool) {\r\n            var that = this, valCell = that.valCell,strVal;\r\n            matStr = matStr || that.format;\r\n            if((typeof fnStr=='string')&&fnStr!=''){\r\n                var sprange = fnStr.split(that.$opts.range), inArr=[];\r\n                jet.each(sprange,function (i,sval) {\r\n                    var reVal = jet.reMatch(sval), inObj={};\r\n                    jet.each(jet.reMatch(matStr),function (r,val) {\r\n                        inObj[val] = reVal[r];\r\n                    });\r\n                    inArr.push(inObj);\r\n                });\r\n                strVal = inArr;\r\n            }else {\r\n                strVal = fnStr;\r\n            }\r\n            var vals = that.parseValue(strVal,matStr);\r\n            if (bool != false) jet.valText(valCell,vals);  \r\n            return vals;\r\n        },\r\n        //获取日期值\r\n        getValue : function (valobj) {\r\n            var that = this, valCell = that.valCell,\r\n                opts = that.$opts, reObj, result = new DateTime().reDate(),\r\n                dateY = result.GetYear(),dateM = result.GetMonth(),dateD = result.GetDate(),\r\n                timeh = result.GetHours(),timem = result.GetMinutes(),times = result.GetSeconds();\r\n            if (valobj == undefined && jet.isBool(opts.isShow)){         \r\n                reObj = jet.valText(valCell); \r\n            }else {\r\n                var isValShow = jet.isBool(opts.isShow) ? (jet.valText(valCell) == \"\") : !jet.isBool(opts.isShow),\r\n                    objarr = jet.extend({YYYY:null,MM:null,DD:null},valobj||{}),\r\n                    ranMat = [],newArr = new Array(2),unObj = function (obj) {\r\n                        return [(objarr[obj] == undefined || objarr[obj] == null),objarr[obj]];\r\n                    }, defObj = [{ YYYY:dateY,MM:dateM,DD:dateD, hh:timeh,mm:timem,ss:times,zz:00},\r\n                        { YYYY:dateY,MM:dateM,DD:dateD, hh:timeh,mm:timem,ss:times,zz:00}];\r\n                if (isValShow) {\r\n                    //目标为空值则获取当前日期时间\r\n                    jet.each(newArr,function (i) {\r\n                        var inObj = {};\r\n                        jet.each(ymdzArr, function (r, val) {\r\n                            inObj[val] = parseInt(unObj(val)[0] ? defObj[i][val] : unObj(val)[1]);\r\n                        });\r\n                        ranMat.push(jet.extend(defObj[i], inObj));\r\n                    });\r\n                } else {\r\n                    var isunRange = opts.range != false, initVal = that.getValue(),\r\n                        spVal = initVal.split(opts.range), reMat = jet.reMatch(that.format);\r\n                    jet.each(newArr,function (i) {\r\n                        var inObj = {}, reVal = isunRange ? jet.reMatch(spVal[i]) : jet.reMatch(initVal);\r\n                        jet.each(reMat,function (r,val) {\r\n                            inObj[val] = reVal[r];\r\n                        });\r\n                        var exVal = jet.extend(inObj,valobj||{});\r\n                        ranMat.push(jet.extend(defObj[i],exVal));\r\n                    });\r\n                }\r\n                reObj = ranMat;\r\n            }\r\n            return reObj;\r\n        },\r\n        storeData:function (curr,next) {\r\n            next = next || {};\r\n            var that = this, opts = that.$opts,multi = opts.multiPane,valCell = that.valCell,\r\n                days = new Date().getDate(), DTS = that.$data,isnext = jet.isObj(next),\r\n                RES = {yearlist:[],monthlist:[[],[]],daylist:[],daytit:[],timelist:[]},seltime,         \r\n                cday = curr.DD == null ? days : curr.DD, nday = next.DD == null ? days : next.DD,\r\n                timeA = {hh:curr.hh,mm:curr.mm,ss:curr.ss}, timeB = {hh:next.hh||0,mm:next.mm||0,ss:next.ss||0};  \r\n            //设置年的数据\r\n            RES.yearlist.push(that.eachYear(parseInt(curr.YYYY),1));\r\n            if(multi == false){\r\n                var yearNext = isnext ? next.YYYY : curr.YYYY;\r\n                RES.yearlist.push(that.eachYear(parseInt(yearNext),2));\r\n            } \r\n            //设置月的数据\r\n            RES.monthlist[0] = that.eachMonth(curr.YYYY,0);\r\n            if(multi == false){\r\n                var monthNext = isnext ? next.YYYY : curr.YYYY+1;\r\n                RES.monthlist[1] = that.eachMonth(curr.YYYY+1,1);\r\n            } \r\n            //设置天的数据\r\n            RES.daylist.push(that.eachDays(curr.YYYY,curr.MM,cday,0));\r\n            RES.daytit.push({YYYY:curr.YYYY,MM:curr.MM});\r\n            if(multi == false){\r\n                var dayNext = jet.nextMonth(curr.YYYY,curr.MM);\r\n                RES.daylist.push(that.eachDays(dayNext.y,dayNext.m,nday,1));\r\n                RES.daytit.push({YYYY:dayNext.y,MM:dayNext.m});\r\n            } \r\n            //设置时间数据\r\n            that.selectTime = [timeA,timeB];  \r\n            RES.timelist.push(that.eachTime(timeA,1));\r\n            if(multi == false){\r\n                seltime = that.dlen == 7 && opts.range && !isnext ? timeA : timeB;\r\n                if(that.dlen == 7 && opts.range && jet.valText(valCell) == \"\"){\r\n                    that.selectTime[1] = jet.extend(timeB,timeA);\r\n                } \r\n                RES.timelist.push(that.eachTime(seltime,2)); \r\n            } \r\n            //最后将数据合并于总数据中\r\n            jet.extend(that.$data,RES);\r\n        },\r\n        dateTemplate : function() {\r\n            var that = this, opts = that.$opts, multi = opts.multiPane,YMDStr = \"\",hmsStr = \"\",lang = opts.language,\r\n                ytxt = lang.name == \"cn\" ? \"年\":\"\", mtxt = lang.name == \"cn\" ? \"月\":\"\";\r\n            var ymvals = multi ? '{%=ymlist[0].YYYY%}-{%=ymlist[0].MM%}':'{%=ymlist[0].YYYY%}-{%=ymlist[0].MM%}#{%=ymlist[ynidx].YYYY%}-{%=ymlist[ynidx].MM%}';\r\n            var aowArr = (function () {\r\n                var butArr = [], ismu = multi ? \"11\":\"23\";\r\n                if(that.dlen == 1){\r\n                    butArr = ['{%=yearlist[i][0].y-'+ismu+'%}','{%=yearlist[i][yearlist[i].length-1].y%}'];\r\n                }else if(that.dlen == 2){\r\n                    butArr = multi ? ['{%=yearlist[0][0].y-1%}','{%=yearlist[0][0].y+1%}']:['{%=yearlist[i][0].y-'+ismu+'%}','{%=yearlist[i][yearlist[i].length-1].y%}'];\r\n                }else if(that.dlen>2 && that.dlen <=6){\r\n                    butArr = ['{%=yearlist[0][0].y-1%}','{%=yearlist[0][0].y+1%}'];\r\n                }\r\n                return butArr;\r\n            })();\r\n            var lyPrev = '<em class=\"yearprev yprev jedatefont\" @on=\"yearBtn(lprev,'+aowArr[0]+')\">&#xed6c2;</em>',\r\n                lyNext = '<em class=\"yearnext ynext jedatefont\" on=\"yearBtn(lnext,'+aowArr[2]+')\">&#xed6c5;</em>',\r\n                ryPrev = '<em class=\"yearprev yprev jedatefont\" on=\"yearBtn(rprev,'+aowArr[3]+')\">&#xed6c2;</em>',\r\n                ryNext = '<em class=\"yearnext ynext jedatefont\" @on=\"yearBtn(rnext,'+aowArr[1]+')\">&#xed6c5;</em>',\r\n                mPrev = '{% if(dlen>2){ %}<em class=\"monthprev mprev jedatefont\" @on=\"monthBtn(mprev,{%=daytit[i].YYYY%}-{%=daytit[i].MM%})\">&#xed602;</em>{% } %}',\r\n                mNext = '{% if(dlen>2){ %}<em class=\"monthnext mnext jedatefont\" @on=\"monthBtn(mnext,{%=daytit[i].YYYY%}-{%=daytit[i].MM%})\">&#xed605;</em>{% } %}';\r\n            //循环年的模板\r\n            var yaerHtml = '<table class=\"yeartable year{%= i==0 ? \"left\":\"right\"%}\" style=\"display:{%=year ? \"block\":\"none\"%};\"><tbody><tr>'+\r\n            '{% for(var y=0;y<=11;y++){ %}<td class=\"{%=yearlist[i][y].style%}\" @on=\"yearClick({%=yearlist[i][y].y%})\"><span>{%=yearlist[i][y].y%}'+ytxt+'</span></td>{% if((y+1)%3==0){ %} </tr>{% } %} {% } %} </tbody></table>';\r\n            //循环月的模板\r\n            var monthHtml = '<table class=\"monthtable month{%= i==0 ? \"left\":\"right\"%}\" style=\"display:{%=month ? \"block\":\"none\"%};\"><tbody><tr>'+\r\n            '{% for(var m=0;m<=11;m++){ %}<td class=\"{%=monthlist[i][m].style%}\" ym=\"{%=monthlist[i][m].y%}-{%=monthlist[i][m].m%}\" @on=\"monthClick({%=monthlist[i][m].y%}-{%=monthlist[i][m].m%})\"><span>{%=monthlist[i][m].m%}'+mtxt+'</span></td>{% if((m+1)%3==0){ %} </tr>{% } %} {% } %} </tbody></table>';\r\n            //循环天的模板\r\n            var daysHtml = '<table class=\"daystable days{%= i==0 ? \"left\":\"right\"%}\" style=\"display:{%=day ? \"block\":\"none\"%};\"><thead><tr>'+\r\n            '{% for(var w=0;w<lang.weeks.length;w++){ %} <th>{%=lang.weeks[w]%}</th> {% } %}</tr></thead><tbody>'+\r\n            '<tr>{% for(var d=0;d<=41;d++){ %}<td class=\"{%=daylist[i][d].style%}\" ymd=\"{%=daylist[i][d].ymd%}\" @on=\"daysClick({%=daylist[i][d].ymd%})\">{%=daylist[i][d].day%}</td>{% if((d+1)%7==0){ %} </tr>{% } %} {% } %} </tbody></table>';\r\n            //循环时间模板\r\n            var hmsHtml = '<div class=\"jedate-time\">{% for(var h=0;h<timelist.length;h++){ %}<div class=\"timepane\"><div class=\"timeheader\">{%= timelist.length == 1 ? lang.timetxt[0]:lang.timetxt[h+1]%}</div><div class=\"timecontent\">'+\r\n            '<div class=\"hmstitle\"><p>{%=lang.times[0]%}</p><p>{%=lang.times[1]%}</p><p>{%=lang.times[2]%}</p></div>'+\r\n            '<div class=\"hmslist\">{% for(var t=0;t<3;t++){ %}<div class=\"hmsauto\"><ul>{% for(var s=0;s<timelist[h][t].length;s++){ %}<li class=\"{%=timelist[h][t][s].style%}\" @on=\"hmsClick({%= h %},{%= h>0?3+t:t %})\">{%= timelist[h][t][s].hms < 10 ? \"0\" + timelist[h][t][s].hms :timelist[h][t][s].hms %}</li>{% } %}</ul></div>{% } %}</div></div>'+'</div>{% } %}</div>'; \r\n            //左边选择模板\r\n            var shortHtml = opts.shortcut.length > 0 ? \"{% for(var s=0;s<shortcut.length;s++){ %}<p @on=shortClick({%= shortcut[s].val %})>{%=shortcut[s].name%}</p>{% } %}\":'';\r\n            \r\n            var ymtitHtml = (function () {\r\n                var ymtitStr = \"\";\r\n                if(that.dlen == 1){\r\n                    ymtitStr = '<span class=\"ymbtn\">{%=yearlist[i][0].y%}'+ytxt+' ~ {%=yearlist[i][yearlist[i].length-1].y%}'+ytxt+'</span>';\r\n                }else if(that.dlen == 2){\r\n                    ymtitStr = '<span class=\"ymbtn\" @on=\"yearShow({%=yearlist[0][i].y%})\">{%=yearlist[0][i].y%}'+ytxt+'</span>';\r\n                }else if(that.dlen>2 && that.dlen <=6){\r\n                    ymtitStr = '<span class=\"ymbtn\" @on=\"monthShow({%=daytit[i].MM%})\">{%=daytit[i].MM%}'+mtxt+'</span>'+\r\n                    '<span class=\"ymbtn\" @on=\"yearShow({%=daytit[i].YYYY%})\">{%=daytit[i].YYYY%}'+ytxt+'</span>';\r\n                }\r\n                return ymtitStr;\r\n            })();\r\n\r\n            var ymButton = (function () {\r\n                var titStrBut = \"\";\r\n                if(that.dlen==1){\r\n                    titStrBut = multi ? [lyPrev+ryNext]:[lyPrev,ryNext];\r\n                }else if(that.dlen==2){  \r\n                    titStrBut = multi ? [lyPrev+ryNext] : [lyPrev,ryNext];  \r\n                }else if(that.dlen>2 && that.dlen <=6){\r\n                    titStrBut = multi ? [lyPrev+mPrev+mNext+ryNext] : [lyPrev+mPrev,mNext+ryNext];\r\n                }else if(that.dlen==7){\r\n                    titStrBut = \"\";\r\n                }\r\n                return titStrBut;\r\n            })();\r\n            \r\n            if(that.dlen == 1){\r\n                YMDStr = yaerHtml;\r\n            }else if(that.dlen == 2){\r\n                YMDStr = yaerHtml + monthHtml;\r\n            }else if(that.dlen == 3){\r\n                YMDStr = yaerHtml + monthHtml + daysHtml;\r\n            }else if(that.dlen > 3 && that.dlen <= 6){\r\n                YMDStr = yaerHtml + monthHtml + daysHtml;\r\n                hmsStr = hmsHtml;\r\n            }else if(that.dlen == 7){\r\n                hmsStr = hmsHtml;\r\n            }\r\n            var paneHtml = '{% for(var i=0;i<pane;i++){ %}<div class=\"jedate-pane\">'+\r\n                '<div class=\"jedate-header\">{% if(i==0){ %}'+ymButton[0]+'{% }else{ %}'+ymButton[1]+'{% } %}'+ymtitHtml+'</div>'+\r\n                '<div class=\"jedate-content{%= i==1?\" bordge\":\"\" %}\">'+YMDStr+'</div>'+\r\n                '</div>{% } %}';   \r\n            var btnStr = '{% if(timebtn){%}<div class=\"timecon\" style=\"cursor: pointer;\" @on=\"timeBtn\">{%=lang.timetxt[0]%}</div>{% } %}<div class=\"btnscon\">{% if(clear){ %}<span class=\"clear\" @on=\"clearBtn\">{%=lang.clear%}</span>{% } %}{% if(today){ %}<span class=\"today\" @on=\"nowBtn\">{%=lang.today%}</span>{% } %}{% if(yes){ %}<span class=\"setok\" @on=\"sureBtn\">{%=lang.yes%}</span>{% } %}</div>';\r\n\r\n            return '<div class=\"jedate-menu\" style=\"display:{%=shortcut.length>0 ? \"block\":\"none\"%};\">'+shortHtml+'</div><div class=\"jedate-wrap\">'+paneHtml+'</div>'+hmsStr+'<div class=\"jedate-footbtn\">'+btnStr+'</div><div class=\"jedate-tips\"></div>';        \r\n        },\r\n        //递归绑定事件\r\n        compileBindNode : function (dom) {\r\n            var self = this, aton = \"@on\";\r\n            var acquireAttr = function (atVal){\r\n                var args=/\\(.*\\)/.exec(atVal);\r\n                if(args) { //如果函数带参数,将参数字符串转换为参数数组\r\n                    args = args[0];\r\n                    atVal = atVal.replace(args,\"\");\r\n                    args = args.replace(/[\\(\\)\\'\\\"]/g,'').split(\",\");\r\n                }else args = [];\r\n                return [atVal,args];\r\n            }; \r\n            jet.each(dom.childNodes,function (i,node) {\r\n                if (node.nodeType === 1) {\r\n                    if(!self.$opts.festival) node.removeAttribute(\"ymd\");\r\n                    self.compileBindNode(node);\r\n                    var geton = node.getAttribute(aton);\r\n                    if(geton != null){\r\n                        var onarr = acquireAttr(geton); \r\n                        jet.on(node,\"click\",function () {\r\n                            self[onarr[0]] && self[onarr[0]].apply(node,onarr[1]);\r\n                        });\r\n                        node.removeAttribute(aton);\r\n                    }    \r\n                }\r\n            });  \r\n        },\r\n        methodEventBind : function() {\r\n            var that = this, opts = that.$opts, multi = opts.multiPane, DTS = that.$data,\r\n                result = new DateTime().reDate(),dateY = result.GetYear(),dateM = result.GetMonth(),dateD = result.GetDate(),\r\n                range = opts.range,elCell = that.dateCell;\r\n            jet.extend(that,{\r\n                yearBtn:function (type,val) {\r\n                    var yarr = val.split(\"#\"), pval = jet.reMatch(yarr[0]), tmval = that.selectTime;\r\n                    exarr = [jet.extend({YYYY:parseInt(val),MM:dateM,DD:dateD},tmval[0]),{}];\r\n                    var dateVal = that.parseValue([exarr[0]],that.format);\r\n                    that.storeData(exarr[0],exarr[1]);\r\n                    that.renderDate();\r\n                    opts.toggle && opts.toggle({elem:that.valCell,val:dateVal,date:exarr[0]});\r\n                },\r\n                yearShow:function (val) {\r\n                    DTS.year = DTS.year ? false : true;\r\n                    DTS.month = that.dlen < 3 ? true : false;   \r\n                    if(that.dlen > 2 && that.dlen <= 6){\r\n                        var dayCell = $Q(\".daystable\",elCell);\r\n                        DTS.day = dayCell.style.display == \"none\" ? true : false;\r\n                    } \r\n                    that.renderDate();\r\n                },\r\n                monthBtn:function (type,val) { \r\n                    var ymarr = jet.reMatch(val),tmval = that.selectTime, exarr=[], PrevYM , NextYM,   \r\n                        year = parseInt(ymarr[0]),month = parseInt(ymarr[1]); \r\n                    if(range){\r\n                        if(type == \"mprev\"){\r\n                            PrevYM = jet.prevMonth(year, month);\r\n                            NextYM = jet.nextMonth(PrevYM.y, PrevYM.m);\r\n                        }else{\r\n                            NextYM = jet.nextMonth(year, month);\r\n                            PrevYM = jet.prevMonth(NextYM.y, NextYM.m);\r\n                        }\r\n                        exarr = [jet.extend({YYYY:PrevYM.y,MM:PrevYM.m,DD:dateD},tmval[0]),{YYYY:NextYM.y,MM:NextYM.m,DD:dateD}];\r\n                    }else{\r\n                        var PNYM = (type == \"mprev\") ? jet.prevMonth(year, month) : jet.nextMonth(year, month);\r\n                        exarr = [jet.extend({YYYY:PNYM.y,MM:PNYM.m,DD:dateD},tmval[0]),{}];\r\n                    }\r\n                    var dateVal = that.parseValue([exarr[0]],that.format);\r\n                    that.storeData(exarr[0],exarr[1]);\r\n                    that.renderDate();\r\n                    opts.toggle && opts.toggle({elem:that.valCell,val:dateVal,date:exarr[0]});\r\n                },\r\n                monthShow:function (val) {\r\n                    DTS.year = false;\r\n                    DTS.month = DTS.month ? false : true; \r\n                    if(that.dlen > 2 && that.dlen <= 6){\r\n                        var dayCell = $Q(\".daystable\",elCell);\r\n                        DTS.day = dayCell.style.display == \"none\" ? true : false;\r\n                    }   \r\n                    that.renderDate();\r\n                },\r\n                shortClick:function (val) {  \r\n                    var reval = val.replace(/\\#/g,','),evobj = eval(\"(\"+reval+\")\"), \r\n                        gval = jet.getDateTime(evobj),tmval = that.selectTime;\r\n                    that.selectValue = [jet.parse(gval,\"YYYY-MM-DD\")];\r\n                    that.selectDate = [{YYYY:gval.YYYY,MM:gval.MM,DD:gval.DD}];\r\n                    that.selectTime = [{ hh: gval.hh, mm: gval.mm, ss: gval.ss }]\r\n                    tmval = that.selectTime;\r\n                    if(opts.onClose){\r\n                        var nYM = jet.nextMonth(gval.YYYY,gval.MM),\r\n                            ymarr = [{YYYY:gval.YYYY,MM:gval.MM,DD:gval.DD},{YYYY:nYM.y,MM:nYM.m,DD:null}];\r\n                        that.storeData(jet.extend(ymarr[0],tmval[0]),jet.extend(ymarr[1],tmval[1]));\r\n                        that.renderDate();\r\n                    }else{\r\n                        that.setValue(gval,that.format);\r\n                        that.closeDate(); \r\n                    }\r\n                },\r\n                yearClick:function (val) {\r\n                    if(jet.hasClass(this,\"disabled\")) return;\r\n                    var yearVal = \"\",lens = that.dlen;\r\n                    if(range && lens == 1){\r\n                        var ylen = that.selectValue.length;\r\n                        that.selectDate = (ylen == 2) ? [{YYYY:parseInt(val),MM:dateM}] : \r\n                            [{YYYY:that.selectDate[0].YYYY,MM:that.selectDate[0].MM},{YYYY:parseInt(val),MM:dateM}];\r\n                        that.selectValue = (ylen == 2) ? [val+\"-\"+jet.digit(dateM)] : [that.selectValue[0],val+\"-\"+jet.digit(dateM)];\r\n                        \r\n                        if(that.selectValue.length == 2){\r\n                            var svalarr = [that.selectValue[0],that.selectValue[1]],newArr = [{},{}];\r\n                            svalarr.sort(function(a, b){ return a > b ? 1 : -1; });\r\n                            that.selectValue = svalarr;\r\n                            jet.each(svalarr,function(i,strval) {\r\n                                jet.each(jet.reMatch(strval),function(s,dval) {\r\n                                    newArr[i][ymdzArr[s]] = dval;\r\n                                });\r\n                            });\r\n                            that.selectDate = newArr;\r\n                        } \r\n                    }else if(lens>1 && lens <=6){   \r\n                        yearVal = parseInt(val);\r\n                    }else{\r\n                        that.selectValue = [val+\"-\"+jet.digit(dateM)];\r\n                        that.selectDate = [{YYYY:parseInt(val),MM:dateM}];\r\n                    }\r\n                    DTS.year = (lens == 1) ? true : false;\r\n                    DTS.month = (lens < 3) ? true : false;\r\n                    DTS.day = (lens > 2 && lens <= 6) ? true : false;\r\n                    var electVal = (lens>1 && lens <=6) ? yearVal : parseInt(that.selectDate[0].YYYY);\r\n                    that.storeData(jet.extend({YYYY:electVal,MM:dateM,DD:dateD},that.selectTime[0]),{});\r\n                    that.renderDate();    \r\n                },\r\n                monthClick:function (val) {\r\n                    if(jet.hasClass(this,\"disabled\")) return;\r\n                    var ymval = jet.reMatch(val),newArr = [{},{}],mlen = that.selectValue.length ;\r\n                    if(range){\r\n                        that.selectDate = (mlen == 2) ? [{YYYY:ymval[0],MM:ymval[1]}] : \r\n                            [{YYYY:that.selectDate[0].YYYY,MM:that.selectDate[0].MM},{YYYY:parseInt(val),MM:ymval[1]}];\r\n                        that.selectValue = (mlen == 2) ? [val] : [that.selectValue[0],val];    \r\n\r\n                        if(that.selectValue.length == 2){\r\n                            var svalarr = [that.selectValue[0],that.selectValue[1]];\r\n                            svalarr.sort(function(a, b){ return a > b ? 1 : -1; });\r\n                            that.selectValue = svalarr;\r\n                            jet.each(svalarr,function(i,strval) {\r\n                                jet.each(jet.reMatch(strval),function(s,dval) {\r\n                                    newArr[i][ymdzArr[s]] = dval;\r\n                                });\r\n                            });\r\n                            that.selectDate = newArr;\r\n                        }\r\n                    }else{\r\n                        that.selectValue = [val];\r\n                        that.selectDate = [{YYYY:ymval[0],MM:ymval[1]}];\r\n                    }\r\n                    if(that.dlen > 2){\r\n                        DTS.year = false;\r\n                        DTS.month = false;\r\n                    }\r\n                    DTS.day = (that.dlen > 2 && that.dlen <= 6) ? true : false;\r\n                    that.storeData(jet.extend({\r\n                        YYYY:parseInt(that.selectDate[0].YYYY),\r\n                        MM:parseInt(that.selectDate[0].MM),\r\n                        DD:dateD\r\n                    },that.selectTime[0]),{});\r\n                    that.renderDate();   \r\n                },\r\n                daysClick:function (val) {\r\n                    if(jet.hasClass(this,\"disabled\")) return;\r\n                    var tmval = that.selectTime, matVal = jet.reMatch(val),\r\n                        slen = that.selectValue.length,dateVal = \"\",\r\n                        newArr = [{},{}],sday,nYM,ymarr;\r\n                    if(range){\r\n                        \r\n                        if(slen == 1){\r\n                            var svalarr = [that.selectValue[0],val];\r\n                            svalarr.sort(function(a, b){ return a > b ? 1 : -1; });\r\n                            that.selectValue = svalarr;\r\n                            jet.each(svalarr,function(i,strval) {\r\n                                jet.each(jet.reMatch(strval),function(s,dval) {\r\n                                    newArr[i][ymdzArr[s]] = dval;\r\n                                });\r\n                            });\r\n                            that.selectDate = newArr;\r\n                        }else{\r\n                            that.selectValue = [val];  \r\n                            newArr = [{YYYY:matVal[0],MM:matVal[1],DD:matVal[2]}];\r\n                            that.selectDate = [{YYYY:matVal[0],MM:matVal[1],DD:matVal[2]},{}];\r\n                        }\r\n                        nYM = jet.nextMonth(newArr[0].YYYY,newArr[0].MM);\r\n                        ymarr = [{YYYY:newArr[0].YYYY,MM:newArr[0].MM,DD:newArr[0].DD},{YYYY:nYM.y,MM:nYM.m,DD:null}];\r\n                        that.storeData(jet.extend(ymarr[0],tmval[0]),jet.extend(ymarr[1],tmval[1]));\r\n                        that.renderDate();\r\n                    }else{\r\n                        that.selectValue = [val];\r\n                        that.selectDate = [{YYYY:matVal[0],MM:matVal[1],DD:matVal[2]},{YYYY:matVal[0],MM:matVal[1],DD:matVal[2]}];\r\n                        jet.each(new Array(range == false ? 1 : 2),function (a) {\r\n                            jet.each(matVal,function (i,val) {\r\n                                newArr[a][ymdzArr[i]] = val;\r\n                            });\r\n                            jet.extend(newArr[a],tmval[a]);\r\n                        });\r\n                        if(opts.onClose){  \r\n                            that.storeData(jet.extend(newArr[0],tmval[0]),jet.extend(newArr[1],tmval[1]));\r\n                            that.renderDate();\r\n                        }else{\r\n                            dateVal = that.setValue(newArr,that.format);\r\n                            that.closeDate();\r\n                            opts.donefun && opts.donefun.call(that,{elem:that.valCell,val:dateVal,date:newArr}); \r\n                        }\r\n                    }    \r\n                },\r\n                hmsClick:function(idx,num) {\r\n                    var pidx = parseInt(num), vals = parseInt(jet.text(this)), \r\n                        paridx = parseInt(idx), act = \"action\",mhms = [\"hh\",\"mm\",\"ss\"], \r\n                        ulCell = $Q(\".jedate-time\",that.dateCell).querySelectorAll(\"ul\")[pidx], \r\n                        tlen = that.$data.timelist[0].length;\r\n                    if(jet.hasClass(this,\"disabled\")) return;\r\n                    jet.each(ulCell.childNodes,function (i,node) {\r\n                        var reg = new RegExp(\"(^|\\\\s+)\" + act + \"(\\\\s+|$)\", \"g\");\r\n                        node.className = reg.test(node.className) ? node.className.replace(reg, '') : node.className;\r\n                    });\r\n                    that.selectTime[paridx][paridx == 1 ? mhms[pidx-tlen]:mhms[pidx]] = vals;\r\n                    this.className = this.className + act;\r\n                    var hmsCls = ulCell.querySelector(\".\"+act);\r\n                    ulCell.scrollTop = hmsCls ? (hmsCls.offsetTop-145):0; \r\n                    if(that.dlen == 7 && idx == 0 && range && !multi){\r\n                        var nVal = that.getValue({}), nYM = jet.nextMonth(nVal[0].YYYY,nVal[0].MM),st = that.selectTime;\r\n                        that.storeData(\r\n                            {YYYY:nVal[0].YYYY,MM:nVal[0].MM,DD:null,hh:st[0].hh,mm:st[0].mm,ss:st[0].ss},\r\n                            {YYYY:nYM.y,MM:nYM.m,DD:null,hh:st[1].hh,mm:st[1].mm,ss:st[1].ss}\r\n                        );\r\n                        that.renderDate();\r\n                    }\r\n                },\r\n                timeBtn:function() {\r\n                    var timeCell = $Q(\".jedate-time\",elCell), disNo = timeCell.style.display == \"none\";\r\n                    jet.text(this,disNo ? opts.language.backtxt:opts.language.timetxt[0]);\r\n                    jet.setCss(timeCell,{display: disNo ? \"block\":\"none\"});\r\n                },\r\n                //清空按钮函数\r\n                clearBtn:function () {\r\n                    jet.valText(that.valCell,\"\");\r\n                    that.selectDate = [jet.parse(jet.getDateTime({}),\"YYYY-MM-DD hh:mm:ss\")];\r\n                    that.closeDate();\r\n                    opts.clearfun && opts.clearfun.call(that); \r\n                },\r\n                //现在按钮函数\r\n                nowBtn:function () {\r\n                    var newArr = jet.getDateTime({}), nYM = jet.nextMonth(newArr.YYYY,newArr.MM), dateVal;   \r\n                    that.selectDate = [newArr];\r\n                    dateVal = opts.isShow ? that.setValue([newArr],that.format,true) : jet.parse(newArr,that.format);\r\n                    if(opts.onClose && range || !opts.isShow){\r\n                        that.storeData(newArr,{YYYY:nYM.y,MM:nYM.m,DD:null,hh:0,mm:0,ss:0});\r\n                        that.renderDate();\r\n                    }else{\r\n                        that.closeDate();\r\n                    } \r\n                    opts.donefun && opts.donefun.call(that,{elem:that.valCell,val:dateVal,date:newArr}); \r\n                },\r\n                //确认按钮函数\r\n                sureBtn:function () {\r\n                    var newArr = that.selectValue.length > 1 ? [{},{}]: [{}], dateVal = \"\", tmval = that.selectTime;\r\n                    var equal = function (o) {\r\n                        var h = o.hh == undefined ? 0:o.hh, m = o.mm == undefined ? 0:o.mm, s = o.ss == undefined ? 0:o.ss;\r\n                        return parseInt(jet.digit(h)+\"\"+jet.digit(m)+\"\"+jet.digit(s));\r\n                    };\r\n                    if(range){\r\n                        if(that.selectValue.length > 1){\r\n                            var sortarr = that.selectValue;\r\n                            sortarr.sort(function(a, b){ return a > b ? 1 : -1; });\r\n                            jet.each(sortarr,function (i,arr) {\r\n                                jet.each(jet.reMatch(arr),function (a,val) {\r\n                                    newArr[i][ymdzArr[a]] = val; \r\n                                });\r\n                                jet.extend(newArr[i],tmval[i]);\r\n                            }); \r\n                        }else if(that.dlen == 7 && tmval.length>1){\r\n                            newArr = tmval;\r\n                        } \r\n                        var sameTime = equal(tmval[0]) >= equal(tmval[1]),selVal = that.selectValue, sameDate = \"\";\r\n                        if(selVal[1] != undefined) sameDate = selVal[0].replace(/\\-/g,\"\") == selVal[1].replace(/\\-/g,\"\");\r\n                        if(selVal.length == 1 && that.dlen < 7){\r\n                            that.tips(opts.language.name == \"cn\" ? \"未选结束日期\" : \"Please select the end date\"); return;\r\n                        }else if((that.dlen == 7 && sameTime) || (sameDate && sameTime)){\r\n                            that.tips(opts.language.name == \"cn\" ? \"结束时间必须大于开始时间\" : \"The end time must be greater than the start time\"); return;\r\n                        } \r\n                    }else{\r\n                        jet.each(new Array(range == false ? 1 : 2),function (i) {\r\n                            if(that.dlen != 7) jet.each(jet.reMatch(that.selectValue[0]),function (a,val) {\r\n                                newArr[i][ymdzArr[a]] = val;\r\n                            });\r\n                            jet.extend(newArr[i],tmval[i]);\r\n                        });\r\n                    } \r\n                    dateVal = that.setValue(newArr,that.format,opts.isShow ? true:false);\r\n                    opts.isShow && that.closeDate();\r\n                    opts.donefun && opts.donefun.call(that,{elem:that.valCell,val:dateVal,date:newArr}); \r\n                },\r\n                blankArea:function () {\r\n                    jet.on(document,\"mouseup\",function (ev) {\r\n                        jet.stopPropagation(ev);  \r\n                        that.closeDate();                      \r\n                    });\r\n                    jet.on($Q(elx),\"mouseup\", function(ev) {\r\n                        jet.stopPropagation(ev); \r\n                    });\r\n                }   \r\n            });\r\n        },\r\n        //循环生成年数据\r\n        eachYear  : function (val,type) {\r\n            var that = this,opts = that.$opts, yNum = parseInt(val),yarr = [],seCls='', selYear = that.selectDate,i,\r\n                mins = jet.reMatch(that.minDate), maxs = jet.reMatch(that.maxDate);   \r\n            i = type == 1 ? yNum : that.yindex;  \r\n            that.yindex = type == 1 ? 12+yNum : 12+that.yindex;\r\n            var endDate = selYear[1] == undefined ? \"\":selYear[1].YYYY;\r\n            for(; i < that.yindex; i++){\r\n                if(i == selYear[0].YYYY || i == endDate){\r\n                    seCls = \"action\";\r\n                }else if(i>selYear[0].YYYY && i<endDate){\r\n                    seCls = \"contain\";\r\n                }else if(i < mins[0] || i > maxs[0]){\r\n                    seCls = \"disabled\";\r\n                }else{\r\n                    seCls =  \"\";\r\n                }\r\n                yarr.push({style:seCls,y:i});    \r\n            }\r\n            return yarr;\r\n        },\r\n        //循环生成月数据\r\n        eachMonth : function (val,type) {\r\n            var that = this,opts = that.$opts, range = opts.range, marr = [],\r\n                selMonth = that.selectDate, seCls='',monthArr = opts.language.month ,\r\n                mins = jet.reMatch(that.minDate), maxs = jet.reMatch(that.maxDate),\r\n                minym = parseInt(mins[0]+\"\"+jet.digit(mins[1])), \r\n                maxym =  parseInt(maxs[0]+\"\"+jet.digit(maxs[1])),\r\n                currStart = parseInt(selMonth[0].YYYY+\"\"+jet.digit(selMonth[0].MM)),\r\n                currEnd = selMonth[1] ? parseInt(selMonth[1].YYYY+\"\"+jet.digit(selMonth[1].MM)) : 0;\r\n            jet.each(monthArr,function (i,months) {\r\n                var ival = parseInt(val+\"\"+jet.digit(months));\r\n                if(ival == currStart || ival == currEnd){\r\n                    seCls = \"action\";\r\n                }else if(ival > currStart && ival < currEnd){ \r\n                    seCls = \"contain\";  \r\n                }else if(ival < minym || ival > maxym){\r\n                    seCls = \"disabled\";\r\n                }else{\r\n                    seCls = \"\";\r\n                }\r\n                marr.push({style:seCls ,y:val ,m:months}); \r\n            }); \r\n            return marr;\r\n        },\r\n        //循环生成天数据\r\n        eachDays  : function (yd,md,ds,idx) {\r\n            var that = this, count = 0, daysArr = [],opts = that.$opts, multiPane = jet.isBool(opts.multiPane),\r\n                firstWeek = new Date(yd, md - 1, 1).getDay() || 7,valrange = opts.range != false,\r\n                daysNum = jet.getDaysNum(yd, md), didx = 0, sDate = that.selectDate,\r\n                prevM = jet.prevMonth(yd, md),isShow = jet.isBool(opts.isShow),\r\n                prevDaysNum = jet.getDaysNum(yd, prevM.m),nextM = jet.nextMonth(yd, md), objCell = that.valCell,\r\n                lang = opts.language, endval = opts.valiDate||[],\r\n                minArr = jet.reMatch(that.minDate), minNum = parseInt(minArr[0]+\"\"+jet.digit(minArr[1])+\"\"+jet.digit(minArr[2])),\r\n                maxArr = jet.reMatch(that.maxDate), maxNum = parseInt(maxArr[0]+\"\"+jet.digit(maxArr[1])+\"\"+jet.digit(maxArr[2]));\r\n            var startDate = sDate[0] ? parseInt(sDate[0].YYYY+\"\"+jet.digit(sDate[0].MM)+\"\"+jet.digit(sDate[0].DD)) : \"\";\r\n            var endDate = sDate[1] ? parseInt(sDate[1].YYYY+\"\"+jet.digit(sDate[1].MM)+\"\"+jet.digit(sDate[1].DD)) : \"\";\r\n            //设置时间标注   \r\n            var setMark = function (my, mm, md) {\r\n                var Marks = opts.marks, contains = function(arr, obj) {\r\n                    var clen = arr.length;\r\n                    while (clen--) {  if (arr[clen] === obj) return true; }\r\n                    return false;\r\n                },isArr = jet.isType(Marks,\"array\");  \r\n                return isArr && Marks.length > 0 && contains(Marks, my + \"-\" + jet.digit(mm) + \"-\" + jet.digit(md)) ? '<i class=\"marks\"></i>' :\"\";\r\n            };\r\n            //是否显示节日\r\n            var isfestival = function(y, m ,d) {\r\n                var festivalStr = '';\r\n                if(opts.festival == true && lang.name == \"cn\"){\r\n                    var lunar = jeLunar(y, m - 1, d), feslunar = (lunar.solarFestival || lunar.lunarFestival),\r\n                        lunartext = (feslunar && lunar.jieqi) != \"\" ? feslunar : (lunar.jieqi || lunar.showInLunar);\r\n                    festivalStr = '<p><span class=\"solar\">' + d + '</span><span class=\"lunar\">' + lunartext + '</span></p>';\r\n                }else{\r\n                    festivalStr = '<p class=\"nolunar\">' + d + '</p>';\r\n                }\r\n                return festivalStr;\r\n            };\r\n            //判断是否在限制的日期之中\r\n            var dateLimit = function(Y, M, D, isMonth){\r\n                var thatNum = parseInt(Y + \"\" + jet.digit(M) + \"\" + jet.digit(D));\r\n                if(isMonth){\r\n                    if (thatNum >= minNum && thatNum <= maxNum) return true;\r\n                }else {\r\n                    if (minNum > thatNum || maxNum < thatNum) return true;\r\n                }\r\n            };\r\n            \r\n            var regExpDate = function (date,cls) {\r\n                var inArray = function (search,array){\r\n                    for(var i in array) if(array[i]==search) return true;\r\n                    return false;\r\n                };\r\n                if(endval.length > 0 && endval[0]!=\"\"){\r\n                    if(/\\%/g.test(endval[0])){\r\n                        var reval = endval[0].replace(/\\%/g,\"\").split(\",\"), enArr = [];\r\n                        jet.each(reval,function (r,rel) {\r\n                            enArr.push(jet.digit(parseInt(rel)));\r\n                        });\r\n                        var isfind = inArray(jet.digit(date), enArr) == false;\r\n                        cls = jet.isBool(endval[1]) ? (isfind ? \" disabled\" :cls) : (isfind ? cls :\" disabled\");\r\n                    }else {\r\n                        var valreg = that.dateRegExp(endval[0]), regday = valreg.test(jet.digit(date));\r\n                        cls = jet.isBool(endval[1]) ? (regday ? \" disabled\" : cls) : (regday ? cls : \" disabled\");\r\n                    }\r\n                }\r\n                return cls;\r\n            };\r\n\r\n            //var ymds = ymdarr[1]\r\n            //上一月剩余天数\r\n            for (var p = prevDaysNum - firstWeek + 1; p <= prevDaysNum; p++, count++) {\r\n                var pmark = setMark(prevM.y,prevM.m,p), pcls = dateLimit(prevM.y, prevM.m, p, false) ? \"disabled\" : \"other\";\r\n                pcls = regExpDate(p,pcls);\r\n                daysArr.push({style:pcls,ymd:prevM.y+'-'+jet.digit(prevM.m)+'-'+jet.digit(p),day:(isfestival(prevM.y,prevM.m,p) + pmark)});\r\n            }\r\n            //本月的天数\r\n            for(var b = 1; b <= daysNum; b++, count++){\r\n                var bmark = setMark(yd,md,b), bcls = \"\";\r\n                var dateval = parseInt(yd+\"\"+jet.digit(md)+\"\"+jet.digit(b)),\r\n                    parsdate = dateval > startDate, rangdate = dateval < endDate;\r\n                if(dateLimit(yd, md, b, true)){\r\n                    if(dateval == startDate || dateval == endDate){\r\n                        bcls = \" action\";\r\n                    }else if(parsdate&&rangdate){\r\n                        bcls = \" contain\";\r\n                    }else {\r\n                        bcls = \"\";\r\n                    }\r\n                }else {\r\n                    bcls = \" disabled\";\r\n                }\r\n                bcls = regExpDate(b,bcls);\r\n                daysArr.push({style:\"normal\"+bcls,ymd:yd+'-'+jet.digit(md)+'-'+jet.digit(b),day:(isfestival(yd,md,b) + bmark)});\r\n            }\r\n            //下一月开始天数\r\n            for(var n = 1, nlen = 42 - count; n <= nlen; n++){\r\n                var nmark = setMark(nextM.y,nextM.m,n);\r\n                var ncls = dateLimit(nextM.y, nextM.m, n, false) ? \"disabled\" : \"other\";\r\n                ncls = regExpDate(n,ncls);\r\n                daysArr.push({style:ncls,ymd:nextM.y+'-'+jet.digit(nextM.m)+'-'+jet.digit(n),day:(isfestival(nextM.y,nextM.m,n) + nmark)});\r\n            }\r\n            //将星期与日期拼接起来\r\n            return daysArr;  \r\n        },\r\n        eachTime  : function (hmsArr,type) {  \r\n            var that = this,opts = that.$opts, range = opts.range,multi = opts.multiPane, minVal = [], maxVal = [],\r\n                mhms = [\"hh\",\"mm\",\"ss\"], timeArr = [],hmsCls = '',format = that.format,    \r\n                ntVal = jet.trim(that.minDate).replace(/\\s+/g,\" \"), \r\n                xtVal = jet.trim(that.maxDate).replace(/\\s+/g,\" \"), \r\n                nVal = ntVal.split(\" \"), xVal = xtVal.split(\" \");\r\n            if(that.dlen>3 && /\\:/.test(nVal) && /\\:/.test(xVal)){\r\n                minVal = jet.reMatch(/\\s/.test(ntVal)&&that.dlen>3 ? nVal[1] : ntVal);\r\n                maxVal = jet.reMatch(/\\s/.test(xtVal)&&that.dlen>3 ? xVal[1] : xtVal);\r\n            }\r\n            jet.each([24,60,60],function (s,lens) {\r\n                timeArr[s] = [];\r\n                var unhmsVal = minVal[s] == undefined || minVal[s] == 0 ? hmsArr[mhms[s]] : minVal[s],\r\n                currVal = that.getValue() == \"\" ? unhmsVal : hmsArr[mhms[s]];\r\n                if(that.dlen>3 && /\\:/.test(nVal) && type==1){\r\n                    that.selectTime[0][mhms[s]] = currVal;\r\n                }\r\n                for (var h = 0; h < lens; h++) {\r\n                    var exists = new RegExp(mhms[s],\"g\").test(format);\r\n                    if(h == currVal){\r\n                        hmsCls = exists ? \"action\" : \"disabled\"; \r\n                    }else if(!exists || !range && multi &&(h<minVal[s] ||h>maxVal[s])){    \r\n                        hmsCls = \"disabled\";\r\n                    }else if(!multi){\r\n                        hmsCls = type == 1&&h<minVal[s] || type == 2&&h>maxVal[s] ? \"disabled\" : \"\";\r\n                    }else{\r\n                        hmsCls = \"\"; \r\n                    }\r\n                    timeArr[s].push({style:hmsCls,hms:h});\r\n                }\r\n            }); \r\n            return timeArr;\r\n        },\r\n        //关闭日期控件\r\n        closeDate : function () {\r\n            var elem = $Q(elx), tipelem = $Q(\"#jedatetipscon\");\r\n            elem && document.body.removeChild(elem);\r\n            tipelem && document.body.removeChild(tipelem);\r\n            //再次初始化值\r\n            this.setDatas();\r\n        },\r\n        //转换日期值\r\n        parseValue : function (fnObj,matStr) {\r\n            var that = this, valArr=[],opts = that.$opts, range = opts.range;\r\n            jet.each(fnObj,function (i,val) {\r\n                valArr.push(jet.parse(val, matStr));\r\n            });\r\n            return range == false ? valArr[0] : valArr.join(range);\r\n        },\r\n        //初始验证正则\r\n        dateRegExp : function(valArr) {\r\n            var enval = valArr.split(\",\")||[], regs = \"\";\r\n            var doExp = function (val) {\r\n                var arr, tmpEval, regs = /#?\\{(.*?)\\}/;\r\n                val = val + \"\";\r\n                while ((arr = regs.exec(val)) != null) {\r\n                    arr.lastIndex = arr.index + arr[1].length + arr[0].length - arr[1].length - 1;\r\n                    tmpEval = parseInt(eval(arr[1]));\r\n                    if (tmpEval < 0) tmpEval = \"9700\" + -tmpEval;\r\n                    val = val.substring(0, arr.index) + tmpEval + val.substring(arr.lastIndex + 1);\r\n                }\r\n                return val;\r\n            };\r\n            if (enval && enval.length > 0) {\r\n                for (var i = 0; i < enval.length; i++) {\r\n                    regs += doExp(enval[i]);\r\n                    if (i != enval.length - 1) regs += \"|\";\r\n                }\r\n                regs = regs ? new RegExp(\"(?:\" + regs + \")\") : null;\r\n            } else {\r\n                regs = null;\r\n            }\r\n            //re = new RegExp((re + \"\").replace(/^\\/\\(\\?:(.*)\\)\\/.*/, \"$1\"));\r\n            return regs;\r\n        },\r\n        //显示农历节日\r\n        showFestival:function () {\r\n            var that = this, opts = that.$opts;\r\n            jet.each(that.dateCell.querySelectorAll(\".daystable td\"),function (i,node) {\r\n                var tval = jet.reMatch(jet.attr(node,\"ymd\")),tipDiv = document.createElement(\"div\");\r\n                node.removeAttribute(\"ymd\");\r\n                //鼠标进入提示框出现\r\n                jet.on(node,\"mouseover\",function () {\r\n                    var lunar = new jeLunar(tval[0], tval[1] - 1, tval[2]);\r\n                    if($Q(\"#jedatetipscon\")) return;\r\n                    tipDiv.id = tipDiv.className = \"jedatetipscon\";\r\n                    var tiphtml = '<p>' + lunar.solarYear + '\\u5E74' + lunar.solarMonth + '\\u6708' + lunar.solarDate + '\\u65E5 ' + lunar.inWeekDays + '</p><p class=\"red\">\\u519C\\u5386：' + lunar.shengxiao + '\\u5E74 ' + lunar.lnongMonth + '\\u6708' + lunar.lnongDate + '</p><p>' + lunar.ganzhiYear + '\\u5E74 ' + lunar.ganzhiMonth + '\\u6708 ' + lunar.ganzhiDate + '\\u65E5</p>';\r\n                    var Fesjieri = (lunar.solarFestival || lunar.lunarFestival) != \"\" ? '<p class=\"red\">' + (\"\\u8282\\u65E5：\"+lunar.solarFestival + lunar.lunarFestival) + '</p>' : \"\";\r\n                    var Fesjieqi = lunar.jieqi != \"\" ? '<p class=\"red\">'+(lunar.jieqi != \"\" ? \"\\u8282\\u6C14：\"+lunar.jieqi : \"\") + '</p>': \"\";\r\n                    var tiptext = (lunar.solarFestival || lunar.lunarFestival || lunar.jieqi) != \"\" ? (Fesjieri + Fesjieqi) : \"\";\r\n                    jet.html(tipDiv,tiphtml + tiptext);\r\n                    document.body.appendChild(tipDiv);\r\n                    //获取并设置农历提示框出现的位置\r\n                    var tipPos = that.lunarOrien(tipDiv, this);\r\n                    jet.setCss(tipDiv,{\"zIndex\":  (opts.zIndex == undefined ? 10000 + 5 : opts.zIndex + 5),top:tipPos.top,left:tipPos.left,position:\"absolute\",display:\"block\"});\r\n                });\r\n                //鼠标移除提示框消失\r\n                jet.on(node,\"mouseout\",function () {\r\n                    document.body.removeChild($Q(\"#jedatetipscon\"));\r\n                });\r\n            });\r\n            if (that.dateCell.nodeType === 1 && !jet.hasClass(that.dateCell,\"grid\")) that.dateCell.className = that.dateCell.className + \" grid\";\r\n        },\r\n        //农历方位辨别\r\n        lunarOrien : function(obj, self, pos) {\r\n            var tops, leris, ortop, orleri, rect =self.getBoundingClientRect(), boxW = obj.offsetWidth, boxH = obj.offsetHeight;\r\n            leris = rect.right + boxW / 1.5 >= jet.docArea(true) ? rect.right - boxW : rect.left + (pos ? 0 : jet.docScroll(true));\r\n            tops = rect.bottom + boxH / 1 <= jet.docArea() ? rect.bottom - 1 : rect.top > boxH / 1.5 ? rect.top - boxH - 1 : jet.docArea() - boxH;\r\n            if(leris + boxW > jet.docArea(true)) leris = rect.left - (boxW - rect.width);\r\n            ortop = Math.max(tops + (pos ? 0 :jet.docScroll()) + 1, 1) + \"px\", orleri = leris + \"px\";\r\n            return {top: ortop, left: orleri }\r\n        },\r\n        //辨别控件的方位\r\n        dateOrien : function(elbox, valCls, pos) {\r\n            var that = this, tops, leris, ortop, orleri,\r\n                rect = that.$opts.fixed ? valCls.getBoundingClientRect() : elbox.getBoundingClientRect(),\r\n                leris = rect.left, tops = rect.bottom;\r\n            if(that.$opts.fixed) {\r\n                var boxW = elbox.offsetWidth, boxH = elbox.offsetHeight;\r\n                //如果右侧超出边界\r\n                if(leris + boxW > jet.docArea(true)){\r\n                    leris = leris - (boxW - rect.width);\r\n                }\r\n                //如果底部超出边界\r\n                if(tops + boxH > jet.docArea()){\r\n                    tops = rect.top > boxH ? rect.top - boxH -2 : jet.docArea() - boxH -1;\r\n                }\r\n                //根据目标元素计算弹层位置\r\n                ortop = Math.max(tops + (pos ? 0 :jet.docScroll())+1, 1) + \"px\"; orleri = leris + \"px\";\r\n            }else{\r\n                //弹层位置位于页面上下左右居中\r\n                ortop = \"50%\"; orleri = \"50%\";\r\n                elbox.style.cssText = \"marginTop:\"+-(rect.height / 2)+\";marginLeft:\"+-(rect.width / 2);\r\n            }\r\n            jet.setCss(elbox,{top:ortop,left:orleri});\r\n        },\r\n        tips : function (text, time) {\r\n            var that = this, tipCls = $Q(\".jedate-tips\",that.dateCell),tipTime;\r\n            jet.html(tipCls,text||\"\"); jet.setCss(tipCls,{display:\"block\"});\r\n            clearTimeout(tipTime);\r\n            tipTime = setTimeout(function(){\r\n                jet.html(tipCls,\"\"); jet.setCss(tipCls,{display:\"none\"});\r\n            }, (time||2.5)*1000);\r\n        },\r\n        locateScroll : function () {\r\n            var that = this, ulCell = $Q(\".jedate-time\",that.dateCell).querySelectorAll(\"ul\");\r\n            jet.each(ulCell, function(i,cell) {\r\n                var hmsCls = cell.querySelector(\".action\");\r\n                cell.scrollTop = hmsCls ? (hmsCls.offsetTop-145):0;\r\n            });\r\n            if(that.dlen != 7) jet.setCss($Q(\".jedate-time\",that.dateCell),{display:'none'});\r\n        }\r\n    });\r\n    \r\n    //农历数据\r\n    function jeLunar(ly,lm,ld) {\r\n        var lunarInfo=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42448,83315,21200,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19415,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448],\r\n            sTermInfo = [ 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 ];\r\n        var Gan = \"甲乙丙丁戊己庚辛壬癸\", Zhi = \"子丑寅卯辰巳午未申酉戌亥\", Animals = \"鼠牛虎兔龙蛇马羊猴鸡狗猪\";\r\n        var solarTerm = [ \"小寒\", \"大寒\", \"立春\", \"雨水\", \"惊蛰\", \"春分\", \"清明\", \"谷雨\", \"立夏\", \"小满\",\r\n            \"芒种\", \"夏至\", \"小暑\", \"大暑\", \"立秋\", \"处暑\", \"白露\", \"秋分\", \"寒露\", \"霜降\", \"立冬\", \"小雪\", \"大雪\", \"冬至\" ];\r\n        var nStr1 = \"日一二三四五六七八九十\", nStr2 = \"初十廿卅\", nStr3 = [ \"正\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"腊\"],\r\n            sFtv1 = {\r\n                \"0101\" : \"*1元旦节\",         \"0202\" : \"湿地日\",\r\n                \"0214\" : \"情人节\",           \"0308\" : \"妇女节\",\r\n                \"0312\" : \"植树节\",           \"0315\" : \"消费者权益日\",\r\n                \"0401\" : \"愚人节\",           \"0422\" : \"地球日\",\r\n                \"0501\" : \"*1劳动节\",         \"0504\" : \"青年节\",\r\n                \"0512\" : \"护士节\",           \"0518\" : \"博物馆日\",\r\n                \"0520\" : \"母亲节\",           \"0601\" : \"儿童节\",\r\n                \"0623\" : \"奥林匹克日\",       \"0630\" : \"父亲节\",\r\n                \"0701\" : \"建党节\",           \"0801\" : \"建军节\",\r\n                \"0903\" : \"抗战胜利日\",       \"0910\" : \"教师节\",\r\n                \"1001\" : \"*3国庆节\",         \"1201\" : \"艾滋病日\",\r\n                \"1224\" : \"平安夜\",           \"1225\" : \"圣诞节\"\r\n            },\r\n            sFtv2 = {\r\n                \"0100\" : \"除夕\",             \"0101\" : \"*2春节\",\r\n                \"0115\" : \"元宵节\",           \"0505\" : \"*1端午节\",\r\n                \"0707\" : \"七夕节\",           \"0715\" : \"中元节\",\r\n                \"0815\" : \"*1中秋节\",         \"0909\" : \"*1重阳节\",\r\n                \"1015\" : \"下元节\",           \"1208\" : \"腊八节\",\r\n                \"1223\" : \"小年\"\r\n\r\n            };\r\n        function flunar(Y) {\r\n            var sTerm = function (j, i) {\r\n                var h = new Date((31556925974.7 * (j - 1900) + sTermInfo[i] * 60000) + Date.UTC(1900, 0, 6, 2, 5));\r\n                return (h.getUTCDate());\r\n            },\r\n            d = function (k) {\r\n                var h, j = 348;\r\n                for (h = 32768; h > 8; h >>= 1) j += (lunarInfo[k - 1900] & h) ? 1 : 0;\r\n                return (j + b(k));\r\n            },\r\n            ymdCyl = function (h) {\r\n                return (Gan.charAt(h % 10) + Zhi.charAt(h % 12));\r\n            },\r\n            b = function (h) {\r\n                var islp = (g(h)) ? ((lunarInfo[h - 1900] & 65536) ? 30 : 29) : (0);\r\n                return islp;\r\n            },\r\n            g = function (h) {\r\n                return (lunarInfo[h - 1900] & 15)\r\n            },\r\n            e = function (i, h) {\r\n                return ((lunarInfo[i - 1900] & (65536 >> h)) ? 30 : 29);\r\n            },\r\n            newymd = function (m) {\r\n                var k, j = 0, h = 0, l = new Date(1900, 0, 31), n = (m - l) / 86400000;\r\n                this.dayCyl = n + 40;\r\n                this.monCyl = 14;\r\n                for (k = 1900; k < 2050 && n > 0; k++) {\r\n                    h = d(k); n -= h;\r\n                    this.monCyl += 12;\r\n                }\r\n                if (n < 0) {\r\n                    n += h; k--;\r\n                    this.monCyl -= 12;\r\n                }\r\n                this.year = k;\r\n                this.yearCyl = k - 1864;\r\n                j = g(k);\r\n                this.isLeap = false;\r\n                for (k = 1; k < 13 && n > 0; k++) {\r\n                    if (j > 0 && k == (j + 1) && this.isLeap == false) {\r\n                        --k;\r\n                        this.isLeap = true;\r\n                        h = b(this.year);\r\n                    } else {\r\n                        h = e(this.year, k);\r\n                    }\r\n                    if (this.isLeap == true && k == (j + 1)) {\r\n                        this.isLeap = false;\r\n                    }\r\n                    n -= h;\r\n                    if (this.isLeap == false) this.monCyl++;\r\n                }\r\n                if (n == 0 && j > 0 && k == j + 1) {\r\n                    if (this.isLeap) {\r\n                        this.isLeap = false;\r\n                    } else {\r\n                        this.isLeap = true;\r\n                        --k;\r\n                        --this.monCyl;\r\n                    }\r\n                }\r\n                if (n < 0) {\r\n                    n += h; --k;\r\n                    --this.monCyl;\r\n                }\r\n                this.month = k;\r\n                this.day = n + 1;\r\n            },\r\n            digit = function (num) {\r\n                return num < 10 ? \"0\" + (num | 0) : num;\r\n            },\r\n            reymd = function (i, j) {\r\n                var h = i;\r\n                return j.replace(/dd?d?d?|MM?M?M?|yy?y?y?/g, function (k) {\r\n                    switch (k) {\r\n                        case \"yyyy\":\r\n                            var l = \"000\" + h.getFullYear();\r\n                            return l.substring(l.length - 4);\r\n                        case \"dd\": return digit(h.getDate());\r\n                        case \"d\": return h.getDate().toString();\r\n                        case \"MM\": return digit((h.getMonth() + 1));\r\n                        case \"M\": return h.getMonth() + 1;\r\n                    }\r\n                });\r\n            },\r\n            lunarMD = function (i, h) {\r\n                var j;\r\n                switch (i, h) {\r\n                    case 10: j = \"初十\"; break;\r\n                    case 20: j = \"二十\"; break;\r\n                    case 30: j = \"三十\"; break;\r\n                    default:\r\n                        j = nStr2.charAt(Math.floor(h / 10));\r\n                        j += nStr1.charAt(h % 10);\r\n                }\r\n                return j;\r\n            };\r\n            this.isToday = false;\r\n            this.isRestDay = false;\r\n            this.solarYear = reymd(Y, \"yyyy\");\r\n            this.solarMonth = reymd(Y, \"M\");\r\n            this.solarDate = reymd(Y, \"d\");\r\n            this.solarWeekDay = Y.getDay();\r\n            this.inWeekDays = \"星期\" + nStr1.charAt(this.solarWeekDay);\r\n            var X = new newymd(Y);\r\n            this.lunarYear = X.year;\r\n            this.shengxiao = Animals.charAt((this.lunarYear - 4) % 12);\r\n            this.lunarMonth = X.month;\r\n            this.lunarIsLeapMonth = X.isLeap;\r\n            this.lnongMonth = this.lunarIsLeapMonth ? \"闰\" + nStr3[X.month - 1] : nStr3[X.month - 1];\r\n            this.lunarDate = X.day;\r\n            this.showInLunar = this.lnongDate = lunarMD(this.lunarMonth, this.lunarDate);\r\n            if (this.lunarDate == 1) {\r\n                this.showInLunar = this.lnongMonth + \"月\";\r\n            }\r\n            this.ganzhiYear = ymdCyl(X.yearCyl);\r\n            this.ganzhiMonth = ymdCyl(X.monCyl);\r\n            this.ganzhiDate = ymdCyl(X.dayCyl++);\r\n            this.jieqi = \"\";\r\n            this.restDays = 0;\r\n            if (sTerm(this.solarYear, (this.solarMonth - 1) * 2) == reymd(Y, \"d\")) {\r\n                this.showInLunar = this.jieqi = solarTerm[(this.solarMonth - 1) * 2];\r\n            }\r\n            if (sTerm(this.solarYear, (this.solarMonth - 1) * 2 + 1) == reymd(Y, \"d\")) {\r\n                this.showInLunar = this.jieqi = solarTerm[(this.solarMonth - 1) * 2 + 1];\r\n            }\r\n            if (this.showInLunar == \"清明\") {\r\n                this.showInLunar = \"清明节\";\r\n                this.restDays = 1;\r\n            }\r\n            this.solarFestival = sFtv1[reymd(Y, \"MM\") + reymd(Y, \"dd\")];\r\n            if (typeof this.solarFestival == \"undefined\") {\r\n                this.solarFestival = \"\";\r\n            } else {\r\n                if (/\\*(\\d)/.test(this.solarFestival)) {\r\n                    this.restDays = parseInt(RegExp.$1);\r\n                    this.solarFestival = this.solarFestival.replace(/\\*\\d/, \"\");\r\n                }\r\n            }\r\n            this.showInLunar = (this.solarFestival == \"\") ? this.showInLunar : this.solarFestival;\r\n            this.lunarFestival = sFtv2[this.lunarIsLeapMonth ? \"00\" : digit(this.lunarMonth) + digit(this.lunarDate)];\r\n            if (typeof this.lunarFestival == \"undefined\") {\r\n                this.lunarFestival = \"\";\r\n            } else {\r\n                if (/\\*(\\d)/.test(this.lunarFestival)) {\r\n                    this.restDays = (this.restDays > parseInt(RegExp.$1)) ? this.restDays : parseInt(RegExp.$1);\r\n                    this.lunarFestival = this.lunarFestival.replace(/\\*\\d/, \"\");\r\n                }\r\n            }\r\n            if (this.lunarMonth == 12 && this.lunarDate == e(this.lunarYear, 12)) {\r\n                this.lunarFestival = sFtv2[\"0100\"];\r\n                this.restDays = 1;\r\n            }\r\n            this.showInLunar = (this.lunarFestival == \"\") ? this.showInLunar : this.lunarFestival;\r\n        }\r\n        return new flunar(new Date(ly, lm, ld));\r\n    }\r\n    return jeDate;\r\n});\r\n"
  },
  {
    "path": "test/demo.js",
    "content": "/**\r\n * jeDate 演示\r\n */\r\n    var enLang = {                            \r\n        name  : \"en\",\r\n        month : [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"],\r\n        weeks : [ \"SUN\",\"MON\",\"TUR\",\"WED\",\"THU\",\"FRI\",\"SAT\" ],\r\n        times : [\"Hour\",\"Minute\",\"Second\"],\r\n        timetxt: [\"Time\",\"Start Time\",\"End Time\"],\r\n        backtxt:\"Back\",\r\n        clear : \"Clear\",\r\n        today : \"Now\",\r\n        yes   : \"Confirm\",\r\n        close : \"Close\"\r\n    }\r\n    //常规选择\r\n    jeDate(\"#test01\",{\r\n        //festival:true,\r\n        //multiPane:false,\r\n        format: \"YYYY\"\r\n    });\r\n\r\n    jeDate(\"#test02\",{\r\n        format: \"YYYY-MM\"\r\n    });\r\n    \r\n    jeDate(\"#test03\",{\r\n        //onClose:false,\r\n        \r\n        format: \"MM-DD-YYYY\"\r\n    });\r\n    jeDate(\"#test04\",{\r\n        festival:true,\r\n        minDate:\"1900-01-01\",              //最小日期\r\n        maxDate:\"2099-12-31\",              //最大日期\r\n        method:{\r\n            choose:function (params) {\r\n                \r\n            }\r\n        },\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });  \r\n    var jds = jeDate(\"#test05\",{\r\n        minDate:\"01:02:08\",              //最小日期\r\n        maxDate:\"15:25:35\",              //最大日期\r\n        format: \"hh:mm:ss\"\r\n    });\r\n    console.log(jds)\r\n    //英文语言\r\n    jeDate(\"#enYMD\",{\r\n        language:enLang,\r\n        format: \"YYYY-MM-DD\"\r\n    });\r\n    jeDate(\"#enYMDhms\",{\r\n        language:enLang,\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });\r\n    jeDate(\"#enhms\",{\r\n        language:enLang,\r\n        format: \"hh:mm:ss\"\r\n    });\r\n\r\n    //自定义主题色\r\n    jeDate(\"#testblue\",{\r\n        theme:{bgcolor:\"#00A1CB\",pnColor:\"#00CCFF\"},\r\n        multiPane:false,\r\n        range:\" ~ \",\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });\r\n    jeDate(\"#testgray\",{\r\n        theme:{bgcolor:\"#00A680\",pnColor:\"#00DDAA\"},\r\n        multiPane:false,\r\n        range:\" ~ \",\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });\r\n    jeDate(\"#testred\",{\r\n        theme:{bgcolor:\"#D91600\",pnColor:\"#FF6653\"},\r\n        multiPane:false,\r\n        range:\" ~ \",\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });\r\n    \r\n    //区域范围选择\r\n    jeDate(\"#test06\",{\r\n        format: \"YYYY\",\r\n        range:\" ~ \"\r\n    });\r\n    jeDate(\"#test07\",{\r\n        format: \"YYYY-MM\",\r\n        range:\" To \"\r\n    });\r\n    jeDate(\"#test08\",{\r\n        format: \"YYYY-MM-DD\",\r\n        range:\" 至 \"\r\n    });\r\n    \r\n    \r\n    //区域范围双面板选择\r\n    var jd = jeDate(\"#test09\",{\r\n        format: \"YYYY\",\r\n        multiPane:false,\r\n        range:\" ~ \"\r\n    });\r\n    jeDate(\"#test10\",{\r\n        format: \"YYYY-MM\",\r\n        multiPane:false,\r\n        range:\" To \"\r\n    });\r\n    jeDate(\"#test11\",{\r\n        format: \"YYYY-MM-DD\",\r\n        multiPane:false,\r\n        range:\" 至 \"\r\n    });\r\n    jeDate(\"#test11A\",{\r\n        format: \"YYYY-MM-DD hh:mm:ss\",\r\n        multiPane:false,\r\n        range:\" 至 \"\r\n    });\r\n    jeDate(\"#test11B\",{\r\n        minDate:\"03:02:04\",              //最小日期\r\n        maxDate:\"14:30:45\", \r\n        format: \"hh:mm:ss\",\r\n        multiPane:false,\r\n        range:\" 至 \"\r\n    });\r\n    jeDate(\"#test11C\",{\r\n        format: \"hh:mm\",\r\n        multiPane:false,\r\n        range:\" 至 \"\r\n    });\r\n\r\n    //自定义格式选择\r\n    jeDate(\"#test12\",{\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test13\",{\r\n        format: \"MM-DD-YYYY\"\r\n    });\r\n    jeDate(\"#test14\",{\r\n        format: \"DD/MM/YYYY\"\r\n    });\r\n\r\n    //一次绑定多个选择\r\n    var jel = document.querySelectorAll(\".moredate\");\r\n    for(var j=0;j<jel.length;j++){\r\n        var mat = jel[j].getAttribute(\"placeholder\");\r\n        jeDate(jel[j],{\r\n            format: mat\r\n        });\r\n    }\r\n\r\n    //一次绑定多个选择DIV类型\r\n    var divel = document.querySelectorAll(\".divmore\");\r\n    for(var j=0;j<divel.length;j++){\r\n        var divmat = divel[j].getAttribute(\"placeholder\");\r\n        jeDate(divel[j],{\r\n            format: divmat\r\n        });\r\n    }\r\n\r\n    //左边多类选择\r\n    jeDate(\"#short\",{\r\n        format:\"YYYY-MM-DD\",\r\n        shortcut:[\r\n            {name:\"一周\",val:{DD:7}},\r\n            {name:\"一个月\",val:{DD:30}},\r\n            {name:\"二个月\",val:{MM:2}},\r\n            {name:\"三个月\",val:{MM:3}},\r\n            {name:\"一年\",val:{DD:365}}\r\n        ],\r\n        donefun:function (obj) {\r\n            //alert(jeDate.getLunar(obj.date[0]).cW);\r\n        }\r\n    });\r\n    jeDate(\"#shortboth\",{\r\n        format:\"YYYY-MM-DD\",\r\n        isinitVal: true,\r\n        range:\" TO \",\r\n        multiPane:false,\r\n        shortcut:[\r\n            {name:\"一周\",val:{DD:7}},\r\n            {name:\"一个月\",val:{DD:30}},\r\n            {name:\"二个月\",val:{MM:2}},\r\n            {name:\"三个月\",val:{MM:3}},\r\n            {name:\"一年\",val:{DD:365}}\r\n        ],\r\n        donefun:function (obj) {\r\n            //var bs = {yy:123,dd:789}\r\n            console.log(jeDate.extend({yy:123,dd:789},{yy:\"you\",aa:456}))\r\n            //alert(jeDate.getLunar(obj.date[0]).cW);\r\n        }\r\n    });\r\n\r\n    //YYYYMMDD格式\r\n    jeDate(\"#dateymd\",{\r\n        format: \"YYYYMMDD\"\r\n    });\r\n    jeDate(\"#dateymdboth\",{\r\n        format: \"YYYYMMDD\",\r\n        multiPane:false,\r\n        range:\" 至 \"\r\n    });\r\n    \r\n    \r\n    //其它功能展示选择\r\n    jeDate(\"#test15\",{\r\n        format: \"YYYY-MM-DD\",\r\n        isinitVal: true\r\n    });\r\n    jeDate(\"#test16\",{\r\n        format: \"YYYY-MM-DD\",\r\n        donefun:function (obj) {\r\n            alert('你选择的日期是：' + obj.val)\r\n        }\r\n    }); \r\n    jeDate(\"#test17\",{\r\n        format: \"YYYY-MM-DD\",\r\n        toggle:function (obj) {\r\n            alert('你选择的日期是：' + obj.val + '\\n\\n获得的对象是' + JSON.stringify(obj.date));\r\n        }\r\n    });\r\n    jeDate(\"#test18\",{\r\n        trigger:\"dblclick\",\r\n        format: \"YYYY-MM-DD\"\r\n    });\r\n    var custom = jeDate(\"#test19\",{\r\n        format: \"YYYY-MM-DD\"\r\n    }).setValue(\"2018-09-01\");\r\n    //或者 custom.setValue(\"2018-09-01\");\r\n    \r\n    //有效、无效日期限制\r\n    jeDate(\"#test20\",{\r\n        valiDate:[\"0[4-7]$,1[1-5]$,2[58]$\",true],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test21\",{\r\n        valiDate:[\"0[4-7]$,1[1-5]$,2[58]$\",false],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test22\",{\r\n        valiDate:[\"1$,3$,6$,9$\",true],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test23\",{\r\n        valiDate:[\"1$,3$,6$,9$\",false],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test24\",{\r\n        valiDate:[\"%1,%3,%6,%9,%12,%15,%25\",true],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n    jeDate(\"#test25\",{\r\n        valiDate:[\"%1,%3,%6,%9,%12,%15,%25\",false],\r\n        format: \"YYYY年MM月DD日\"\r\n    });\r\n\r\n    //直接展示日历\r\n    jeDate(\"#show01\",{\r\n        isShow:false,\r\n        format: \"YYYY-MM-DD hh:mm:ss\"\r\n    });\r\n    jeDate(\"#show02\",{\r\n        isShow:false,\r\n        format: \"YYYY-MM\"\r\n    });\r\n    jeDate(\"#show03\",{\r\n        isShow:false,\r\n        format: \"YYYY\"\r\n    });\r\n    jeDate(\"#show04\",{\r\n        isShow:false,\r\n        format: \"hh:mm:ss\"\r\n    });\r\n\r\n    \r\n    "
  },
  {
    "path": "test/jeDate-test.css",
    "content": "html,body{min-height:100%;}\r\nhtml{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}\r\nbody,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin: 0;padding: 0;border: 0;outline: 0;-webkit-tap-highlight-color:transparent;}\r\narticle,aside,header,footer,nav,section,figure,figcaption,hgroup,progress,canvas{display:block}\r\nblockquote:before,blockquote:after,q:before,q:after{content:'';content:none}\r\nbody{font-size:14px;font-family:'PingFangSC-Light','PingFang SC','Segoe UI','Lucida Grande','NotoSansHans-Light','Microsoft YaHei', '\\5FAE\\8F6F\\96C5\\9ED1', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif;text-rendering:geometricPrecision;color:#333333;background:#FFFFFF;}\r\n\r\na:active,a:hover{outline:0}\r\nimg{display:inline-block;border:0}\r\nli{list-style:none}\r\ntable{border-collapse:collapse;border-spacing:0}\r\nh1,h2,h3{font-size:14px;font-weight:400}\r\nh4,h5,h6{font-size:100%;font-weight:400}\r\nbutton,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0;margin: 0px;padding: 0px;}\r\npre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}\r\n\r\nhr{height:1px;margin:10px 0;border:0;background-color:#e2e2e2;clear:both}\r\na{color:#333;text-decoration:none}\r\na:hover{color:#777}\r\n.gray{background-color: #f2f2f2;}\r\n\r\n.icons{background-image: url(\"jedate.png\"); background-repeat:no-repeat; }\r\n.jequote{max-width: 1200px;margin-bottom: 10px;padding: 15px;line-height: 22px;border: 4px solid #00A080;border-radius: 4px;background-color: #f5f5f5;font-size: 15px;}\r\n.jebody{max-width: 1200px;margin: 40px auto 100px auto;position: relative;}\r\n.jewarp{width:100%;margin: 15px 0; }\r\n.jewarp h3{position: relative;left: 0;height: 40px;line-height:40px;padding-left:10px;white-space: nowrap;border-radius: 4px 4px 0 0;font-size: 16px;color:#00A080;text-align: left;border: 1px solid #ededed;border-bottom: none;}\r\n.jewarp .content{border: 1px solid #ededed;border-radius:0 0 4px 4px;padding: 25px 10px 10px 10px;overflow: hidden;}\r\n.jeitem{width:33.33%;margin:0 0px 15px 0;position: relative;float: left;}\r\n.jelabel{width: 120px;float: left;display: block;padding: 9px 10px;font-weight: 400;text-align: right; color:#555;}\r\n.jeinpbox{width: 230px;margin-right: 10px;float: left;vertical-align: middle;position: relative;}\r\n.jeinput{display: block;width: 100%;padding-left: 10px; height: 36px;line-height: 34px\\9;border: 1px solid #e6e6e6;background-color: #fff;border-radius: 3px;background-color: #fcfcfc;}\r\n.jeindiv{display: block;width: 100%;padding-left: 10px; height: 36px;line-height: 36px;border-bottom: 1px solid #e6e6e6;background-color: #fff;background-color: #fcfcfc;}\r\n.jebtns{width: 35px;margin-left: 10px; height: 36px;line-height: 36px\\9;border: 1px solid #e6e6e6;background-color: #fff;border-radius: 3px;background-position:right center;float: left;cursor: pointer;position: absolute;top:0;right:-12px;}\r\n.jefixeitem{width:25%;margin:0 0px 15px 0;position: relative;float: left; text-align: center;}\r\n\r\n"
  }
]