├── static
└── .gitkeep
├── config
├── prod.env.js
├── dev.env.js
└── index.js
├── .gitignore
├── .editorconfig
├── .postcssrc.js
├── .babelrc
├── src
├── main.js
├── app.vue
├── calendar.js
└── calendar.vue
├── index.html
├── LICENSE
├── package.json
└── README.md
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | NODE_ENV: '"production"'
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | var merge = require('webpack-merge')
2 | var prodEnv = require('./prod.env')
3 |
4 | module.exports = merge(prodEnv, {
5 | NODE_ENV: '"development"'
6 | })
7 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | // to edit target browsers: use "browserlist" field in package.json
6 | "autoprefixer": {}
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", { "modules": false }],
4 | "stage-2"
5 | ],
6 | "plugins": ["transform-runtime"],
7 | "env": {
8 | "test": {
9 | "presets": ["env", "stage-2"],
10 | "plugins": [ "istanbul" ]
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue'
4 | import App from './app'
5 |
6 | Vue.config.productionTip = false
7 |
8 | /* eslint-disable no-new */
9 | new Vue({
10 | el: '#app',
11 | template: ' ',
12 | components: { App }
13 | })
14 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | vue-calendar
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Zee Kim
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | // see http://vuejs-templates.github.io/webpack for documentation.
2 | var path = require('path')
3 |
4 | module.exports = {
5 | build: {
6 | env: require('./prod.env'),
7 | index: path.resolve(__dirname, '../dist/index.html'),
8 | assetsRoot: path.resolve(__dirname, '../dist'),
9 | assetsSubDirectory: 'static',
10 | assetsPublicPath: '',
11 | productionSourceMap: true,
12 | // Gzip off by default as many popular static hosts such as
13 | // Surge or Netlify already gzip all static assets for you.
14 | // Before setting to `true`, make sure to:
15 | // npm install --save-dev compression-webpack-plugin
16 | productionGzip: false,
17 | productionGzipExtensions: ['js', 'css'],
18 | // Run the build command with an extra argument to
19 | // View the bundle analyzer report after build finishes:
20 | // `npm run build --report`
21 | // Set to `true` or `false` to always turn it on or off
22 | bundleAnalyzerReport: process.env.npm_config_report
23 | },
24 | dev: {
25 | env: require('./dev.env'),
26 | port: 666,
27 | autoOpenBrowser: true,
28 | assetsSubDirectory: 'static',
29 | assetsPublicPath: '',
30 | proxyTable: {},
31 | // CSS Sourcemaps off by default because relative paths are "buggy"
32 | // with this option, according to the CSS-Loader README
33 | // (https://github.com/webpack/css-loader#sourcemaps)
34 | // In our experience, they generally work as expected,
35 | // just be aware of this issue when enabling this option.
36 | cssSourceMap: false
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-calendar",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "ZEE.KIM <129@jinzhe.net>",
6 | "private": true,
7 | "main": "./src/calendar.vue",
8 | "scripts": {
9 | "dev": "node build/dev-server.js",
10 | "start": "node build/dev-server.js",
11 | "build": "node build/build.js"
12 | },
13 | "dependencies": {
14 | "vue": "^2.3.3"
15 | },
16 | "devDependencies": {
17 | "autoprefixer": "^6.7.2",
18 | "babel-core": "^6.22.1",
19 | "babel-loader": "^6.2.10",
20 | "babel-plugin-transform-runtime": "^6.22.0",
21 | "babel-preset-env": "^1.3.2",
22 | "babel-preset-stage-2": "^6.22.0",
23 | "babel-register": "^6.22.0",
24 | "chalk": "^1.1.3",
25 | "connect-history-api-fallback": "^1.3.0",
26 | "copy-webpack-plugin": "^4.0.1",
27 | "css-loader": "^0.28.0",
28 | "eventsource-polyfill": "^0.9.6",
29 | "express": "^4.14.1",
30 | "extract-text-webpack-plugin": "^2.0.0",
31 | "file-loader": "^0.11.1",
32 | "friendly-errors-webpack-plugin": "^1.1.3",
33 | "html-webpack-plugin": "^2.28.0",
34 | "http-proxy-middleware": "^0.17.3",
35 | "webpack-bundle-analyzer": "^2.2.1",
36 | "semver": "^5.3.0",
37 | "shelljs": "^0.7.6",
38 | "opn": "^4.0.2",
39 | "optimize-css-assets-webpack-plugin": "^1.3.0",
40 | "ora": "^1.2.0",
41 | "rimraf": "^2.6.0",
42 | "url-loader": "^0.5.8",
43 | "vue-loader": "^12.1.0",
44 | "vue-style-loader": "^3.0.1",
45 | "vue-template-compiler": "^2.3.3",
46 | "webpack": "^2.6.1",
47 | "webpack-dev-middleware": "^1.10.0",
48 | "webpack-hot-middleware": "^2.18.0",
49 | "webpack-merge": "^4.1.0"
50 | },
51 | "engines": {
52 | "node": ">= 4.0.0",
53 | "npm": ">= 3.0.0"
54 | },
55 | "browserslist": [
56 | "> 1%",
57 | "last 2 versions",
58 | "not ie <= 8"
59 | ]
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue Calendar
2 |
3 | > A calendar components for Vue.js.
4 |
5 | 
6 |
7 |
8 | ### Live Demo
9 | > http://jinzhe.github.io/vue-calendar/
10 |
11 | ### Getting Started
12 |
13 | ``` html
14 |
15 |
16 |
17 |
18 | 弹出框
19 |
20 |
21 |
22 |
23 |
24 | 单选/英文/事件
25 |
26 |
27 |
28 |
29 | 多选/农历
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
137 |
138 |
252 |
253 | ```
254 | ### Props
255 |
256 | - :value Array default:[] * default value for calendar
257 | - :begin Array default:[] * limit begin select date
258 | - :end Array default:[] * limit end select date
259 | - :range Bool default:false * You can select a time period
260 | - :zero Bool default:false * Date zero
261 | - :lunar Bool default:false * Show Chinese Lunar
262 | - :weeks Array * According to the system language changes or custom
263 | - :months Array * According to the system language changes or custom
264 | - :events Object * Customize calendar events
265 |
266 | ### Features
267 | - You can limit the start and end dates.
268 | - Customize week and month headlines.
269 | - Support show Chinese lunar calendar, Chinese festivals, international festivals
270 | - Support for custom presentation.
271 | - Support multiple choice
272 | - Customize calendar events
273 |
274 | ### Build Setup
275 |
276 | ``` bash
277 | # install dependencies
278 | npm install
279 |
280 | # serve with hot reload at localhost:666
281 | npm run dev
282 |
283 | # build for production with minification
284 | npm run build
285 | ```
--------------------------------------------------------------------------------
/src/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
196 |
197 |
312 |
--------------------------------------------------------------------------------
/src/calendar.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @1900-2100区间内的公历、农历互转
3 | * @charset UTF-8
4 | * @Author Jea杨(JJonline@JJonline.Cn)
5 | * @Time 2014-7-21
6 | * @Time 2016-8-13 Fixed 2033hex、Attribution Annals
7 | * @Time 2016-9-25 Fixed lunar LeapMonth Param Bug
8 | * @Version 1.0.2
9 | * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
10 | * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
11 | */
12 | var calendar = {
13 |
14 | /**
15 | * 农历1900-2100的润大小信息表
16 | * @Array Of Property
17 | * @return Hex
18 | */
19 | lunarInfo:[0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,//1900-1909
20 | 0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,//1910-1919
21 | 0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,//1920-1929
22 | 0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,//1930-1939
23 | 0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,//1940-1949
24 | 0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,//1950-1959
25 | 0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,//1960-1969
26 | 0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,//1970-1979
27 | 0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,//1980-1989
28 | 0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,//1990-1999
29 | 0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,//2000-2009
30 | 0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,//2010-2019
31 | 0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,//2020-2029
32 | 0x05aa0,0x076a3,0x096d0,0x04afb,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,//2030-2039
33 | 0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,//2040-2049
34 | /**Add By JJonline@JJonline.Cn**/
35 | 0x14b63,0x09370,0x049f8,0x04970,0x064b0,0x168a6,0x0ea50, 0x06b20,0x1a6c4,0x0aae0,//2050-2059
36 | 0x0a2e0,0x0d2e3,0x0c960,0x0d557,0x0d4a0,0x0da50,0x05d55,0x056a0,0x0a6d0,0x055d4,//2060-2069
37 | 0x052d0,0x0a9b8,0x0a950,0x0b4a0,0x0b6a6,0x0ad50,0x055a0,0x0aba4,0x0a5b0,0x052b0,//2070-2079
38 | 0x0b273,0x06930,0x07337,0x06aa0,0x0ad50,0x14b55,0x04b60,0x0a570,0x054e4,0x0d160,//2080-2089
39 | 0x0e968,0x0d520,0x0daa0,0x16aa6,0x056d0,0x04ae0,0x0a9d4,0x0a2d0,0x0d150,0x0f252,//2090-2099
40 | 0x0d520],//2100
41 |
42 | /**
43 | * 公历每个月份的天数普通表
44 | * @Array Of Property
45 | * @return Number
46 | */
47 | solarMonth:[31,28,31,30,31,30,31,31,30,31,30,31],
48 |
49 | /**
50 | * 天干地支之天干速查表
51 | * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
52 | * @return Cn string
53 | */
54 | Gan:["\u7532","\u4e59","\u4e19","\u4e01","\u620a","\u5df1","\u5e9a","\u8f9b","\u58ec","\u7678"],
55 |
56 | /**
57 | * 天干地支之地支速查表
58 | * @Array Of Property
59 | * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
60 | * @return Cn string
61 | */
62 | Zhi:["\u5b50","\u4e11","\u5bc5","\u536f","\u8fb0","\u5df3","\u5348","\u672a","\u7533","\u9149","\u620c","\u4ea5"],
63 |
64 | /**
65 | * 天干地支之地支速查表<=>生肖
66 | * @Array Of Property
67 | * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
68 | * @return Cn string
69 | */
70 | Animals:["\u9f20","\u725b","\u864e","\u5154","\u9f99","\u86c7","\u9a6c","\u7f8a","\u7334","\u9e21","\u72d7","\u732a"],
71 |
72 | /**
73 | * 24节气速查表
74 | * @Array Of Property
75 | * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
76 | * @return Cn string
77 | */
78 | solarTerm:["\u5c0f\u5bd2","\u5927\u5bd2","\u7acb\u6625","\u96e8\u6c34","\u60ca\u86f0","\u6625\u5206","\u6e05\u660e","\u8c37\u96e8","\u7acb\u590f","\u5c0f\u6ee1","\u8292\u79cd","\u590f\u81f3","\u5c0f\u6691","\u5927\u6691","\u7acb\u79cb","\u5904\u6691","\u767d\u9732","\u79cb\u5206","\u5bd2\u9732","\u971c\u964d","\u7acb\u51ac","\u5c0f\u96ea","\u5927\u96ea","\u51ac\u81f3"],
79 |
80 | /**
81 | * 1900-2100各年的24节气日期速查表
82 | * @Array Of Property
83 | * @return 0x string For splice
84 | */
85 | sTermInfo:['9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf97c3598082c95f8c965cc920f',
86 | '97bd0b06bdb0722c965ce1cfcc920f','b027097bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
87 | '97bcf97c359801ec95f8c965cc920f','97bd0b06bdb0722c965ce1cfcc920f','b027097bd097c36b0b6fc9274c91aa',
88 | '97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f','97bd0b06bdb0722c965ce1cfcc920f',
89 | 'b027097bd097c36b0b6fc9274c91aa','9778397bd19801ec9210c965cc920e','97b6b97bd19801ec95f8c965cc920f',
90 | '97bd09801d98082c95f8e1cfcc920f','97bd097bd097c36b0b6fc9210c8dc2','9778397bd197c36c9210c9274c91aa',
91 | '97b6b97bd19801ec95f8c965cc920e','97bd09801d98082c95f8e1cfcc920f','97bd097bd097c36b0b6fc9210c8dc2',
92 | '9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec95f8c965cc920e','97bcf97c3598082c95f8e1cfcc920f',
93 | '97bd097bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec9210c965cc920e',
94 | '97bcf97c3598082c95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
95 | '97b6b97bd19801ec9210c965cc920e','97bcf97c3598082c95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722',
96 | '9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f',
97 | '97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
98 | '97bcf97c359801ec95f8c965cc920f','97bd097bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
99 | '97b6b97bd19801ec9210c965cc920e','97bcf97c359801ec95f8c965cc920f','97bd097bd07f595b0b6fc920fb0722',
100 | '9778397bd097c36b0b6fc9210c8dc2','9778397bd19801ec9210c9274c920e','97b6b97bd19801ec95f8c965cc920f',
101 | '97bd07f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c920e',
102 | '97b6b97bd19801ec95f8c965cc920f','97bd07f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2',
103 | '9778397bd097c36c9210c9274c91aa','97b6b97bd19801ec9210c965cc920e','97bd07f1487f595b0b0bc920fb0722',
104 | '7f0e397bd097c36b0b6fc9210c8dc2','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
105 | '97bcf7f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
106 | '97b6b97bd19801ec9210c965cc920e','97bcf7f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
107 | '9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e','97bcf7f1487f531b0b0bb0b6fb0722',
108 | '7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b97bd19801ec9210c965cc920e',
109 | '97bcf7f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
110 | '97b6b97bd19801ec9210c9274c920e','97bcf7f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
111 | '9778397bd097c36b0b6fc9210c91aa','97b6b97bd197c36c9210c9274c920e','97bcf7f0e47f531b0b0bb0b6fb0722',
112 | '7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9210c8dc2','9778397bd097c36c9210c9274c920e',
113 | '97b6b7f0e47f531b0723b0b6fb0722','7f0e37f5307f595b0b0bc920fb0722','7f0e397bd097c36b0b6fc9210c8dc2',
114 | '9778397bd097c36b0b70c9274c91aa','97b6b7f0e47f531b0723b0b6fb0721','7f0e37f1487f595b0b0bb0b6fb0722',
115 | '7f0e397bd097c35b0b6fc9210c8dc2','9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721',
116 | '7f0e27f1487f595b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa',
117 | '97b6b7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
118 | '9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
119 | '7f0e397bd097c35b0b6fc920fb0722','9778397bd097c36b0b6fc9274c91aa','97b6b7f0e47f531b0723b0b6fb0721',
120 | '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9274c91aa',
121 | '97b6b7f0e47f531b0723b0787b0721','7f0e27f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
122 | '9778397bd097c36b0b6fc9210c91aa','97b6b7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
123 | '7f0e397bd07f595b0b0bc920fb0722','9778397bd097c36b0b6fc9210c8dc2','977837f0e37f149b0723b0787b0721',
124 | '7f07e7f0e47f531b0723b0b6fb0722','7f0e37f5307f595b0b0bc920fb0722','7f0e397bd097c35b0b6fc9210c8dc2',
125 | '977837f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0721','7f0e37f1487f595b0b0bb0b6fb0722',
126 | '7f0e397bd097c35b0b6fc9210c8dc2','977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
127 | '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722','977837f0e37f14998082b0787b06bd',
128 | '7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd097c35b0b6fc920fb0722',
129 | '977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
130 | '7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
131 | '7f0e27f1487f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14998082b0787b06bd',
132 | '7f07e7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0b0bb0b6fb0722','7f0e397bd07f595b0b0bc920fb0722',
133 | '977837f0e37f14998082b0723b06bd','7f07e7f0e37f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
134 | '7f0e397bd07f595b0b0bc920fb0722','977837f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b0721',
135 | '7f07e7f0e47f531b0723b0b6fb0722','7f0e37f1487f595b0b0bb0b6fb0722','7f0e37f0e37f14898082b0723b02d5',
136 | '7ec967f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0722','7f0e37f1487f531b0b0bb0b6fb0722',
137 | '7f0e37f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
138 | '7f0e37f1487f531b0b0bb0b6fb0722','7f0e37f0e37f14898082b072297c35','7ec967f0e37f14998082b0787b06bd',
139 | '7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722','7f0e37f0e37f14898082b072297c35',
140 | '7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722',
141 | '7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f149b0723b0787b0721',
142 | '7f0e27f1487f531b0b0bb0b6fb0722','7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14998082b0723b06bd',
143 | '7f07e7f0e47f149b0723b0787b0721','7f0e27f0e47f531b0723b0b6fb0722','7f0e37f0e366aa89801eb072297c35',
144 | '7ec967f0e37f14998082b0723b06bd','7f07e7f0e37f14998083b0787b0721','7f0e27f0e47f531b0723b0b6fb0722',
145 | '7f0e37f0e366aa89801eb072297c35','7ec967f0e37f14898082b0723b02d5','7f07e7f0e37f14998082b0787b0721',
146 | '7f07e7f0e47f531b0723b0b6fb0722','7f0e36665b66aa89801e9808297c35','665f67f0e37f14898082b0723b02d5',
147 | '7ec967f0e37f14998082b0787b0721','7f07e7f0e47f531b0723b0b6fb0722','7f0e36665b66a449801e9808297c35',
148 | '665f67f0e37f14898082b0723b02d5','7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721',
149 | '7f0e36665b66a449801e9808297c35','665f67f0e37f14898082b072297c35','7ec967f0e37f14998082b0787b06bd',
150 | '7f07e7f0e47f531b0723b0b6fb0721','7f0e26665b66a449801e9808297c35','665f67f0e37f1489801eb072297c35',
151 | '7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722'],
152 |
153 | /**
154 | * 数字转中文速查表
155 | * @Array Of Property
156 | * @trans ['日','一','二','三','四','五','六','七','八','九','十']
157 | * @return Cn string
158 | */
159 | nStr1:["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341"],
160 |
161 | /**
162 | * 日期转农历称呼速查表
163 | * @Array Of Property
164 | * @trans ['初','十','廿','卅']
165 | * @return Cn string
166 | */
167 | nStr2:["\u521d","\u5341","\u5eff","\u5345"],
168 |
169 | /**
170 | * 月份转农历称呼速查表
171 | * @Array Of Property
172 | * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
173 | * @return Cn string
174 | */
175 | nStr3:["\u6b63","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u51ac","\u814a"],
176 |
177 | /**
178 | * 返回农历y年一整年的总天数
179 | * @param lunar Year
180 | * @return Number
181 | * @eg:var count = calendar.lYearDays(1987) ;//count=387
182 | */
183 | lYearDays:function(y) {
184 | var i, sum = 348;
185 | for(i=0x8000; i>0x8; i>>=1) { sum += (calendar.lunarInfo[y-1900] & i)? 1: 0; }
186 | return(sum+calendar.leapDays(y));
187 | },
188 |
189 | /**
190 | * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
191 | * @param lunar Year
192 | * @return Number (0-12)
193 | * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
194 | */
195 | leapMonth:function(y) { //闰字编码 \u95f0
196 | return(calendar.lunarInfo[y-1900] & 0xf);
197 | },
198 |
199 | /**
200 | * 返回农历y年闰月的天数 若该年没有闰月则返回0
201 | * @param lunar Year
202 | * @return Number (0、29、30)
203 | * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
204 | */
205 | leapDays:function(y) {
206 | if(calendar.leapMonth(y)) {
207 | return((calendar.lunarInfo[y-1900] & 0x10000)? 30: 29);
208 | }
209 | return(0);
210 | },
211 |
212 | /**
213 | * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
214 | * @param lunar Year
215 | * @return Number (-1、29、30)
216 | * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
217 | */
218 | monthDays:function(y,m) {
219 | if(m>12 || m<1) {return -1}//月份参数从1至12,参数错误返回-1
220 | return( (calendar.lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
221 | },
222 |
223 | /**
224 | * 返回公历(!)y年m月的天数
225 | * @param solar Year
226 | * @return Number (-1、28、29、30、31)
227 | * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
228 | */
229 | solarDays:function(y,m) {
230 | if(m>12 || m<1) {return -1} //若参数错误 返回-1
231 | var ms = m-1;
232 | if(ms==1) { //2月份的闰平规律测算后确认返回28或29
233 | return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
234 | }else {
235 | return(calendar.solarMonth[ms]);
236 | }
237 | },
238 |
239 | /**
240 | * 农历年份转换为干支纪年
241 | * @param lYear 农历年的年份数
242 | * @return Cn string
243 | */
244 | toGanZhiYear:function(lYear) {
245 | var ganKey = (lYear - 3) % 10;
246 | var zhiKey = (lYear - 3) % 12;
247 | if(ganKey == 0) ganKey = 10;//如果余数为0则为最后一个天干
248 | if(zhiKey == 0) zhiKey = 12;//如果余数为0则为最后一个地支
249 | return calendar.Gan[ganKey-1] + calendar.Zhi[zhiKey-1];
250 |
251 | },
252 |
253 | /**
254 | * 公历月、日判断所属星座
255 | * @param cMonth [description]
256 | * @param cDay [description]
257 | * @return Cn string
258 | */
259 | toAstro:function(cMonth,cDay) {
260 | var s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
261 | var arr = [20,19,21,21,21,22,23,23,23,23,22,22];
262 | return s.substr(cMonth*2 - (cDay < arr[cMonth-1] ? 2 : 0),2) + "\u5ea7";//座
263 | },
264 |
265 | /**
266 | * 传入offset偏移量返回干支
267 | * @param offset 相对甲子的偏移量
268 | * @return Cn string
269 | */
270 | toGanZhi:function(offset) {
271 | return calendar.Gan[offset%10] + calendar.Zhi[offset%12];
272 | },
273 |
274 | /**
275 | * 传入公历(!)y年获得该年第n个节气的公历日期
276 | * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
277 | * @return day Number
278 | * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
279 | */
280 | getTerm:function(y,n) {
281 | if(y<1900 || y>2100) {return -1;}
282 | if(n<1 || n>24) {return -1;}
283 | var _table = calendar.sTermInfo[y-1900];
284 | var _info = [
285 | parseInt('0x'+_table.substr(0,5)).toString() ,
286 | parseInt('0x'+_table.substr(5,5)).toString(),
287 | parseInt('0x'+_table.substr(10,5)).toString(),
288 | parseInt('0x'+_table.substr(15,5)).toString(),
289 | parseInt('0x'+_table.substr(20,5)).toString(),
290 | parseInt('0x'+_table.substr(25,5)).toString()
291 | ];
292 | var _calday = [
293 | _info[0].substr(0,1),
294 | _info[0].substr(1,2),
295 | _info[0].substr(3,1),
296 | _info[0].substr(4,2),
297 |
298 | _info[1].substr(0,1),
299 | _info[1].substr(1,2),
300 | _info[1].substr(3,1),
301 | _info[1].substr(4,2),
302 |
303 | _info[2].substr(0,1),
304 | _info[2].substr(1,2),
305 | _info[2].substr(3,1),
306 | _info[2].substr(4,2),
307 |
308 | _info[3].substr(0,1),
309 | _info[3].substr(1,2),
310 | _info[3].substr(3,1),
311 | _info[3].substr(4,2),
312 |
313 | _info[4].substr(0,1),
314 | _info[4].substr(1,2),
315 | _info[4].substr(3,1),
316 | _info[4].substr(4,2),
317 |
318 | _info[5].substr(0,1),
319 | _info[5].substr(1,2),
320 | _info[5].substr(3,1),
321 | _info[5].substr(4,2),
322 | ];
323 | return parseInt(_calday[n-1]);
324 | },
325 |
326 | /**
327 | * 传入农历数字月份返回汉语通俗表示法
328 | * @param lunar month
329 | * @return Cn string
330 | * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
331 | */
332 | toChinaMonth:function(m) { // 月 => \u6708
333 | if(m>12 || m<1) {return -1} //若参数错误 返回-1
334 | var s = calendar.nStr3[m-1];
335 | s+= "\u6708";//加上月字
336 | return s;
337 | },
338 |
339 | /**
340 | * 传入农历日期数字返回汉字表示法
341 | * @param lunar day
342 | * @return Cn string
343 | * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
344 | */
345 | toChinaDay:function(d){ //日 => \u65e5
346 | var s;
347 | switch (d) {
348 | case 10:
349 | s = '\u521d\u5341'; break;
350 | case 20:
351 | s = '\u4e8c\u5341'; break;
352 | break;
353 | case 30:
354 | s = '\u4e09\u5341'; break;
355 | break;
356 | default :
357 | s = calendar.nStr2[Math.floor(d/10)];
358 | s += calendar.nStr1[d%10];
359 | }
360 | return(s);
361 | },
362 |
363 | /**
364 | * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
365 | * @param y year
366 | * @return Cn string
367 | * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
368 | */
369 | getAnimal: function(y) {
370 | return calendar.Animals[(y - 4) % 12]
371 | },
372 |
373 | /**
374 | * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
375 | * @param y solar year
376 | * @param m solar month
377 | * @param d solar day
378 | * @return JSON object
379 | * @eg:console.log(calendar.solar2lunar(1987,11,01));
380 | */
381 | solar2lunar:function (y,m,d) { //参数区间1900.1.31~2100.12.31
382 | if(y<1900 || y>2100) {return -1;}//年份限定、上限
383 | if(y==1900&&m==1&&d<31) {return -1;}//下限
384 | if(!y) { //未传参 获得当天
385 | var objDate = new Date();
386 | }else {
387 | var objDate = new Date(y,parseInt(m)-1,d)
388 | }
389 | var i, leap=0, temp=0;
390 | //修正ymd参数
391 | var y = objDate.getFullYear(),m = objDate.getMonth()+1,d = objDate.getDate();
392 | var offset = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;
393 | for(i=1900; i<2101 && offset>0; i++) { temp=calendar.lYearDays(i); offset-=temp; }
394 | if(offset<0) { offset+=temp; i--; }
395 |
396 | //是否今天
397 | var isTodayObj = new Date(),isToday=false;
398 | if(isTodayObj.getFullYear()==y && isTodayObj.getMonth()+1==m && isTodayObj.getDate()==d) {
399 | isToday = true;
400 | }
401 | //星期几
402 | var nWeek = objDate.getDay(),cWeek = calendar.nStr1[nWeek];
403 | if(nWeek==0) {nWeek =7;}//数字表示周几顺应天朝周一开始的惯例
404 | //农历年
405 | var year = i;
406 |
407 | var leap = calendar.leapMonth(i); //闰哪个月
408 | var isLeap = false;
409 |
410 | //效验闰月
411 | for(i=1; i<13 && offset>0; i++) {
412 | //闰月
413 | if(leap>0 && i==(leap+1) && isLeap==false){
414 | --i;
415 | isLeap = true; temp = calendar.leapDays(year); //计算农历闰月天数
416 | }
417 | else{
418 | temp = calendar.monthDays(year, i);//计算农历普通月天数
419 | }
420 | //解除闰月
421 | if(isLeap==true && i==(leap+1)) { isLeap = false; }
422 | offset -= temp;
423 | }
424 |
425 | if(offset==0 && leap>0 && i==leap+1)
426 | if(isLeap){
427 | isLeap = false;
428 | }else{
429 | isLeap = true; --i;
430 | }
431 | if(offset<0){ offset += temp; --i; }
432 | //农历月
433 | var month = i;
434 | //农历日
435 | var day = offset + 1;
436 |
437 | //天干地支处理
438 | var sm = m-1;
439 | var gzY = calendar.toGanZhiYear(year);
440 |
441 | //月柱 1900年1月小寒以前为 丙子月(60进制12)
442 | var firstNode = calendar.getTerm(year,(m*2-1));//返回当月「节」为几日开始
443 | var secondNode = calendar.getTerm(year,(m*2));//返回当月「节」为几日开始
444 |
445 | //依据12节气修正干支月
446 | var gzM = calendar.toGanZhi((y-1900)*12+m+11);
447 | if(d>=firstNode) {
448 | gzM = calendar.toGanZhi((y-1900)*12+m+12);
449 | }
450 |
451 | //传入的日期的节气与否
452 | var isTerm = false;
453 | var Term = null;
454 | if(firstNode==d) {
455 | isTerm = true;
456 | Term = calendar.solarTerm[m*2-2];
457 | }
458 | if(secondNode==d) {
459 | isTerm = true;
460 | Term = calendar.solarTerm[m*2-1];
461 | }
462 | //日柱 当月一日与 1900/1/1 相差天数
463 | var dayCyclical = Date.UTC(y,sm,1,0,0,0,0)/86400000+25567+10;
464 | var gzD = calendar.toGanZhi(dayCyclical+d-1);
465 | //该日期所属的星座
466 | var astro = calendar.toAstro(m,d);
467 |
468 | return {'lYear':year,'lMonth':month,'lDay':day,'Animal':calendar.getAnimal(year),'IMonthCn':(isLeap?"\u95f0":'')+calendar.toChinaMonth(month),'IDayCn':calendar.toChinaDay(day),'cYear':y,'cMonth':m,'cDay':d,'gzYear':gzY,'gzMonth':gzM,'gzDay':gzD,'isToday':isToday,'isLeap':isLeap,'nWeek':nWeek,'ncWeek':"\u661f\u671f"+cWeek,'isTerm':isTerm,'Term':Term,'astro':astro};
469 | },
470 |
471 | /**
472 | * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
473 | * @param y lunar year
474 | * @param m lunar month
475 | * @param d lunar day
476 | * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
477 | * @return JSON object
478 | * @eg:console.log(calendar.lunar2solar(1987,9,10));
479 | */
480 | lunar2solar:function(y,m,d,isLeapMonth) { //参数区间1900.1.31~2100.12.1
481 | var isLeapMonth = !!isLeapMonth;
482 | var leapOffset = 0;
483 | var leapMonth = calendar.leapMonth(y);
484 | var leapDay = calendar.leapDays(y);
485 | if(isLeapMonth&&(leapMonth!=m)) {return -1;}//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
486 | if(y==2100&&m==12&&d>1 || y==1900&&m==1&&d<31) {return -1;}//超出了最大极限值
487 | var day = calendar.monthDays(y,m);
488 | var _day = day;
489 | //bugFix 2016-9-25
490 | //if month is leap, _day use leapDays method
491 | if(isLeapMonth) {
492 | _day = calendar.leapDays(y,m);
493 | }
494 | if(y < 1900 || y > 2100 || d > _day) {return -1;}//参数合法性效验
495 |
496 | //计算农历的时间差
497 | var offset = 0;
498 | for(var i=1900;i0) {
506 | offset+=calendar.leapDays(y);isAdd = true;
507 | }
508 | }
509 | offset+=calendar.monthDays(y,i);
510 | }
511 | //转换闰月农历 需补充该年闰月的前一个月的时差
512 | if(isLeapMonth) {offset+=day;}
513 | //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
514 | var stmap = Date.UTC(1900,1,30,0,0,0);
515 | var calObj = new Date((offset+d-31)*86400000+stmap);
516 | var cY = calObj.getUTCFullYear();
517 | var cM = calObj.getUTCMonth()+1;
518 | var cD = calObj.getUTCDate();
519 |
520 | return calendar.solar2lunar(cY,cM,cD);
521 | }
522 | };
523 |
524 | export default calendar
--------------------------------------------------------------------------------
/src/calendar.vue:
--------------------------------------------------------------------------------
1 |
2 |
213 |
214 |
215 |
216 |
245 |
246 |
247 |
248 | {{week}}
249 |
250 |
251 |
252 |
253 |
254 | {{child.day}}
255 | {{child.eventName}}
256 | {{child.lunar}}
257 |
258 |
259 |
260 |
261 |
262 |
263 | {{y}}
264 |
265 |
266 |
267 |
268 |
269 |
810 |
--------------------------------------------------------------------------------