7d6affad by simon

日历部分功能

1 parent dfb049f0
1 module.exports = { 1 module.exports = {
2 presets: [ 2 presets: [
3 '@vue/app' 3 '@vue/app'
4 ] 4 ],
5 sourceType: 'unambiguous'
5 } 6 }
......
...@@ -69,7 +69,7 @@ html { ...@@ -69,7 +69,7 @@ html {
69 } 69 }
70 70
71 body{ 71 body{
72 font-size: 14px; 72 // font-size: 14px;
73 } 73 }
74 74
75 html, 75 html,
......
1 import api from '@/api/api'
2 import {
3 httpGet,
4 httpPost
5 } from '@/api/fetch-api.js'
6
7 import Date from '@/utils/date.js';
8
9 export default {
10 props: {
11 // 周末是否可选
12 weekend: {
13 type: Boolean,
14 default: false
15 },
16 filterDates: {
17 type: Array,
18 default(){
19 return ["2019-11-26", "2019-11-28"]
20 }
21 }
22 },
23 data() {
24 return {
25 key: 'value',
26 year: 1970,
27 month: 1, // (1~12)
28 date: 1, // (1~31)
29 day: 0, // (0~6)
30 // 用户渲染的数据
31 fortmatMonthData: [],
32 }
33 },
34 components: {},
35 methods: {
36 /**
37 * 画月历图
38 * 所需数据
39 * year 年
40 * month 月 (1~12)
41 * date 日 (1~31)
42 * day 星期几 (0-6)
43 *
44 * 输出数据
45 * fortmatMonthData 用于渲染日历的数据
46 */
47 formatMonth() {
48 let result = [];
49 let year = this.year;
50 let month = this.month;
51
52 // 获取当月天数
53 let dayNum = Date.getDaysInMonth(year, month - 1);
54
55 /**
56 * 排布出当月号码
57 * 组装数据
58 */
59 for (let index = 0; index < dayNum; index++) {
60 let curData = {}
61 curData.standards = 0;
62 let date = index + 1;
63 let day = Date.parse(`${year}.${month}.${date}`).getDay();
64 let isWeekend = day == 0 || day == 6;
65 let disable = false; // 判断是否不可选
66 disable = isWeekend && !this.weekend; // 判断周末不可选
67 let filterDates = this.filterDates;
68 filterDates.forEach(element => {
69 let curDate = `${year}-${month}-${date}`;
70 if (element == curDate) {
71 disable = true;
72 }
73 });
74 curData = Object.assign({
75 year: year,
76 month: month,
77 date: date, // (1~31)
78 day: day,
79 isWeekend: isWeekend,
80 disable: disable,
81 }, curData);
82 result.push(curData);
83 }
84
85 // 当月1号星期几 0-6 往前塞值
86 let dateStr = month + '.' + '1' + '.' + year;
87 let firstDay = Date.parse(dateStr).getDay();
88
89 // 根据星期几在前面补空格 星期日0格子,星期一1格子,星期六6格子
90 for (let index = 0; index < firstDay; index++) {
91 result.unshift(null);
92 }
93 this.fortmatMonthData = result;
94 },
95 // 加/减 月份
96 addMonths(value) {
97 let dateStr = this.month + '.' + this.date + '.' + this.year;
98 let targetDate = Date.parse(dateStr).addMonths(value);
99 this.year = targetDate.getFullYear();
100 this.month = targetDate.getMonth() + 1;
101 this.date = targetDate.getDate();
102 this.formatMonth();
103 },
104 // 上一个月
105 prevMonth() {
106 this.addMonths(-1);
107 },
108 // 下一个月
109 nextMonth() {
110 this.addMonths(1);
111 },
112 // 加/减 年份
113 addYear(value) {
114 let dateStr = this.month + '.' + this.date + '.' + this.year;
115 let targetDate = Date.parse(dateStr).addYears(value);
116 this.year = targetDate.getFullYear();
117 this.month = targetDate.getMonth() + 1;
118 this.formatMonth();
119 },
120 // 上一年
121 prevYear() {
122 this.addYear(-1);
123 },
124 // 下一年
125 nextYear() {
126 this.addYear(1);
127 },
128 selectDay(item) {
129 if (!item) return;
130 let curData = item;
131 let date = curData.date;
132 this.date = date;
133 },
134 initData() {}
135 },
136 mounted() {},
137 created() {
138 // 设置今天日期
139 let today = Date.today();
140 this.year = today.getFullYear();
141 this.month = today.getMonth() + 1;
142 this.date = today.getDate();
143 this.formatMonth();
144 }
145 }
1 @import '@/styles/_support';
2
3 // 日历容器
4 .date-wrap {
5
6 font-family: Arial;
7 font-size: 14px;
8
9 // 日历
10 .calendar-wrap {
11 position: relative;
12 @extend .bb;
13 width: 450px;
14 height: 320px;
15 border-radius: $borderRadius;
16 background-color: wheat;
17 border: solid 1px #dcdddd;
18 padding: 28px 36px 18px 36px;
19 background-color: #ffffff;
20
21 // 年月标题
22 .nav-wrap {
23 @extend .flc;
24 align-items: center;
25 color: $cOrange;
26
27 .date-wrap {
28 @extend .flb;
29 align-items: center;
30
31 .date {
32 // margin: 0 40px;
33 width: 154px;
34 text-align: center;
35 }
36 }
37
38 .nav-btn2 {
39 color: #959595;
40 }
41 }
42
43 .con {
44 margin: 12px auto 0;
45
46 // 表头
47 .th {
48 @extend .flb;
49
50 // 单元格
51 .td {
52 color: $cOrange;
53 }
54 }
55
56 // 表体
57 .tr {
58 @extend .flb;
59 justify-content: flex-start;
60 flex-wrap: wrap;
61 // margin-top: 0px;
62
63 .td {
64 text-align: center;
65 width: calc(100%/7);
66 height: 34px;
67 @extend .flb;
68 justify-content: center;
69 align-items: center;
70 }
71 }
72
73 .point {
74 width: 28px;
75 height: 28px;
76 line-height: 28px;
77 text-align: center;
78 border-radius: 100%;
79 }
80
81 .sel {
82 color: #ffffff;
83 background-color: $cOrange;
84 }
85 }
86 }
87 }
88
89 .disable {
90 color: #dcdddd !important;
91 cursor: default !important;
92 }
1
2 <template>
3 <div class="comp">
4 <div class="date-wrap">
5 <div class="calendar-wrap">
6 <!-- 标题 -->
7 <div class="nav-wrap">
8 <div class="date-wrap">
9 <div class="pointer nav-btn" @click="prevMonth">
10 <img src="@/assets/images/form/date-picker/data-picker-icon-up.png">
11 </div>
12 <div class="date">
13 <span class="pointer">{{year}}{{month}}</span>
14 </div>
15 <div class="pointer nav-btn" @click="nextMonth">
16 <img src="@/assets/images/form/date-picker/data-picker-icon-down.png">
17 </div>
18 </div>
19 </div>
20 <!-- 日历躯干 -->
21 <div class="con">
22 <!-- 日历表头 -->
23 <div class="th tr">
24 <div class="td" :class="{'disable':!weekend}">日</div>
25 <div class="td"></div>
26 <div class="td"></div>
27 <div class="td"></div>
28 <div class="td"></div>
29 <div class="td"></div>
30 <div class="td" :class="{'disable':!weekend}">六</div>
31 </div>
32 <!-- 日历主体 -->
33 <div class="tr">
34 <div class="td" v-for="(item,index) in fortmatMonthData" :key="index">
35 <div @click="selectDay(item.disable ? null : item)" v-if="item && item.date" class="pointer point" :class="{'sel':item && item.date && item.date == date,'disable':item.disable}">
36 <div>{{item && item.date || ""}}</div>
37 </div>
38 </div>
39 </div>
40 </div>
41 </div>
42 </div>
43 </div>
44 </template>
45
46 <script src="./date-picker.js"></script>
47 <style lang="scss" scoped>
48 @import "./date-picker.scss";
49 </style>
...@@ -87,7 +87,7 @@ export default { ...@@ -87,7 +87,7 @@ export default {
87 // console.log("curData.value == =", curData.value) 87 // console.log("curData.value == =", curData.value)
88 if (curData.value == "logout") { 88 if (curData.value == "logout") {
89 // this.$store.commit("SET_USER_INFO", null); 89 // this.$store.commit("SET_USER_INFO", null);
90 this._loginHandler(); 90 this.loginHandler();
91 } else { 91 } else {
92 // 不是的话,跳转页面 92 // 不是的话,跳转页面
93 this.$router.push({ 93 this.$router.push({
...@@ -101,13 +101,13 @@ export default { ...@@ -101,13 +101,13 @@ export default {
101 // value: this.dataList[index] 101 // value: this.dataList[index]
102 // }); 102 // });
103 }, 103 },
104 _loginHandler() { 104 loginHandler() {
105 httpPost({ url: api.logout }).then(() => { 105 httpPost({ url: api.logout }).then(() => {
106 this.$store.commit("SET_USER_INFO", null); 106 this.$store.commit("SET_USER_INFO", null);
107 this._showLogoutTip(); 107 this.showLogoutTip();
108 }); 108 });
109 }, 109 },
110 _showLogoutTip() { 110 showLogoutTip() {
111 // 登出后的提示 111 // 登出后的提示
112 alert("登出成功"); 112 alert("登出成功");
113 } 113 }
...@@ -118,6 +118,5 @@ export default { ...@@ -118,6 +118,5 @@ export default {
118 } 118 }
119 }, 119 },
120 created() { 120 created() {
121 // this.
122 }, 121 },
123 }; 122 };
......
1 // @import '@/styles/_support'; 1 @import '@/styles/_support';
2 @import '@/styles/_utils';
3 2
4 .v-footer { 3 .v-footer {
5 font-family: MicrosoftYaHei; 4 font-family: MicrosoftYaHei;
6 color: #ffffff; 5 color: #ffffff;
7 background-color: #2e2b2a; 6 background-color: #2e2b2a;
7 font-size: $fontSizeSmall;
8 8
9 .footer-containter { 9 .footer-containter {
10 margin: 0 auto; 10 margin: 0 auto;
...@@ -35,9 +35,7 @@ ...@@ -35,9 +35,7 @@
35 35
36 // 热线 36 // 热线
37 .hotline { 37 .hotline {
38 // margin-right: 8rem;
39 min-width: 280px; 38 min-width: 280px;
40 // flex: 1;
41 39
42 .contact { 40 .contact {
43 .n-item { 41 .n-item {
...@@ -45,9 +43,8 @@ ...@@ -45,9 +43,8 @@
45 } 43 }
46 44
47 .phone { 45 .phone {
48 // font-family: Arial;
49 color: #ea5a26; 46 color: #ea5a26;
50 font-size: 1.666667rem; 47 font-size: $fontSizeTitle;
51 font-weight: bold; 48 font-weight: bold;
52 } 49 }
53 50
......
...@@ -52,10 +52,7 @@ ...@@ -52,10 +52,7 @@
52 .t1 { 52 .t1 {
53 width: 100%; 53 width: 100%;
54 text-align: center; 54 text-align: center;
55 font-size: 18px; 55 font-size: $fontSizeTitle;
56 // line-height: 1.8rem;
57
58 // background-color: wheat;
59 56
60 } 57 }
61 } 58 }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
8 padding: 2.833333rem 4.0rem 0 3.5rem; 8 padding: 2.833333rem 4.0rem 0 3.5rem;
9 width: 64.166667rem; 9 width: 64.166667rem;
10 height: 32.25rem; 10 height: 32.25rem;
11 border-radius: 8px; 11 border-radius: $borderRadius;
12 border: solid 1px #f2f2f2; 12 border: solid 1px #f2f2f2;
13 background-color: #ffffff; 13 background-color: #ffffff;
14 } 14 }
...@@ -19,13 +19,13 @@ ...@@ -19,13 +19,13 @@
19 margin-bottom: 4.416667rem; 19 margin-bottom: 4.416667rem;
20 20
21 &-item { 21 &-item {
22 font-size: 12px; 22 font-size: $paddingSmall;
23 23
24 &-tit { 24 &-tit {
25 display: flex; 25 display: flex;
26 align-items: center; 26 align-items: center;
27 color: $cOrange; 27 color: $cOrange;
28 font-size: 18px; 28 font-size: $fontSizeTitle;
29 font-weight: bold; 29 font-weight: bold;
30 height: 2.833333rem; 30 height: 2.833333rem;
31 31
......
...@@ -4,13 +4,17 @@ import { ...@@ -4,13 +4,17 @@ import {
4 httpPost 4 httpPost
5 } from '@/api/fetch-api.js' 5 } from '@/api/fetch-api.js'
6 6
7 import DatePicker from '@/components/date-picker/date-picker.vue'
8
7 export default { 9 export default {
8 data() { 10 data() {
9 return { 11 return {
10 key: 'value' 12 key: 'value'
11 } 13 }
12 }, 14 },
13 components: {}, 15 components: {
16 DatePicker
17 },
14 methods: { 18 methods: {
15 initData() {} 19 initData() {}
16 }, 20 },
......
1 @import '@/styles/_support'; 1 @import '@/styles/_support';
2 2
3 .content {} 3 .content {
4 // background-color: wheat;
5 padding-bottom: 200px;
6 }
......
1 1
2 <template> 2 <template>
3 <div class="content"> 3 <div class="content">
4 4 <date-picker>
5 </date-picker>
5 </div> 6 </div>
6 </template> 7 </template>
7 8
......
...@@ -4,6 +4,7 @@ import { ...@@ -4,6 +4,7 @@ import {
4 httpPost 4 httpPost
5 } from '@/api/fetch-api.js' 5 } from '@/api/fetch-api.js'
6 6
7
7 export default { 8 export default {
8 data() { 9 data() {
9 return { 10 return {
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 16
17 .tit { 17 .tit {
18 text-align: center; 18 text-align: center;
19 font-size: 18px; 19 font-size: $fontSizeTitle;
20 font-weight: bold; 20 font-weight: bold;
21 letter-spacing: 1.8px; 21 letter-spacing: 1.8px;
22 } 22 }
......
...@@ -153,11 +153,11 @@ const routes = [ ...@@ -153,11 +153,11 @@ const routes = [
153 } 153 }
154 }, 154 },
155 // 404页面 155 // 404页面
156 { 156 // {
157 path: '*', // * 表示上面路径匹配不到的都显示这个页面 157 // path: '*', // * 表示上面路径匹配不到的都显示这个页面
158 name: '404', 158 // name: '404',
159 component: Index 159 // component: Index
160 }, 160 // },
161 ] 161 ]
162 162
163 // add route path 163 // add route path
......
...@@ -94,10 +94,13 @@ ...@@ -94,10 +94,13 @@
94 text-align: center; 94 text-align: center;
95 color: #ffffff; 95 color: #ffffff;
96 background-color: #f05a23; 96 background-color: #f05a23;
97 // box-shadow: 0px 10px 13px 0 rgba(236, 100, 41, 0.2);
98 // background-blend-mode: soft-light, ;
99 // background-image: linear-gradient(to bottom, #f05f28, #f05021);
100
97 box-shadow: 0px 10px 13px 0 rgba(236, 100, 41, 0.2); 101 box-shadow: 0px 10px 13px 0 rgba(236, 100, 41, 0.2);
98 background-blend-mode: soft-light, ; 102 background-blend-mode: soft-light, ;
99 // background-image: linear-gradient(to top, #000000, #ffffff), linear-gradient(to bottom, #f05a23, #f05a23); 103 background-image: linear-gradient(to top, #000000, #ffffff), linear-gradient(to bottom, #ec6429, #ec6429);
100 background-image: linear-gradient(to bottom, #f05f28, #f05021);
101 } 104 }
102 105
103 106
......
...@@ -3,18 +3,23 @@ ...@@ -3,18 +3,23 @@
3 background-size: 100% 100%; 3 background-size: 100% 100%;
4 } 4 }
5 5
6
7 //flex 布局和 子元素 对其方式 6 //flex 布局和 子元素 对其方式
8 .fl { 7 .fl {
9 display: flex; 8 display: flex;
10 } 9 }
11 10
12 .fj { 11 .flc {
12 display: flex;
13 justify-content: center;
14 }
15
16 .flb {
13 display: flex; 17 display: flex;
14 justify-content: space-between; 18 justify-content: space-between;
15 } 19 }
16 20
17 .fla{ 21
22 .fla {
18 display: flex; 23 display: flex;
19 align-items: center; 24 align-items: center;
20 } 25 }
...@@ -53,10 +58,10 @@ ...@@ -53,10 +58,10 @@
53 text-align: center; 58 text-align: center;
54 } 59 }
55 60
56 .bc{ 61 .bc {
57 text-align: center; 62 text-align: center;
58 } 63 }
59 64
60 .flex1{ 65 .flex1 {
61 flex: 1; 66 flex: 1;
62 } 67 }
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
6 * 6 *
7 */ 7 */
8 8
9
10 $borderRadiusSmall:5px;
11 $borderRadius:8px;
12
9 // Margin 13 // Margin
10 $marginSmall: 10px; // 小间距 14 $marginSmall: 10px; // 小间距
11 $marginMedium: 28px; // 间距 15 $marginMedium: 28px; // 间距
...@@ -29,3 +33,9 @@ $cGray:#bfbfbf; ...@@ -29,3 +33,9 @@ $cGray:#bfbfbf;
29 $cDark:#dcdcdc; 33 $cDark:#dcdcdc;
30 $cLightBlack:#333333; 34 $cLightBlack:#333333;
31 $cFontGray: #4c4948; 35 $cFontGray: #4c4948;
36
37
38 // 移动端
39 $marginSmall-M: 10px; // 小间距
40 $marginMedium-M: 20px; // 间距
41 // $marginLarge: 28px;
......
...@@ -3,1530 +3,1530 @@ ...@@ -3,1530 +3,1530 @@
3 * @author: Coolite Inc. http://www.coolite.com/ 3 * @author: Coolite Inc. http://www.coolite.com/
4 * @date: 2008-05-13 4 * @date: 2008-05-13
5 * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved. 5 * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
6 * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 6 * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
7 * @website: http://www.datejs.com/ 7 * @website: http://www.datejs.com/
8 */ 8 */
9 9
10 Date.CultureInfo = { 10 Date.CultureInfo = {
11 name: "en-US", 11 name: "en-US",
12 englishName: "English (United States)", 12 englishName: "English (United States)",
13 nativeName: "English (United States)", 13 nativeName: "English (United States)",
14 dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 14 dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
15 abbreviatedDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 15 abbreviatedDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
16 shortestDayNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], 16 shortestDayNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
17 firstLetterDayNames: ["S", "M", "T", "W", "T", "F", "S"], 17 firstLetterDayNames: ["S", "M", "T", "W", "T", "F", "S"],
18 monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 18 monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
19 abbreviatedMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], 19 abbreviatedMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
20 amDesignator: "AM", 20 amDesignator: "AM",
21 pmDesignator: "PM", 21 pmDesignator: "PM",
22 firstDayOfWeek: 0, 22 firstDayOfWeek: 0,
23 twoDigitYearMax: 2029, 23 twoDigitYearMax: 2029,
24 dateElementOrder: "mdy", 24 dateElementOrder: "mdy",
25 formatPatterns: { 25 formatPatterns: {
26 shortDate: "M/d/yyyy", 26 shortDate: "M/d/yyyy",
27 longDate: "dddd, MMMM dd, yyyy", 27 longDate: "dddd, MMMM dd, yyyy",
28 shortTime: "h:mm tt", 28 shortTime: "h:mm tt",
29 longTime: "h:mm:ss tt", 29 longTime: "h:mm:ss tt",
30 fullDateTime: "dddd, MMMM dd, yyyy h:mm:ss tt", 30 fullDateTime: "dddd, MMMM dd, yyyy h:mm:ss tt",
31 sortableDateTime: "yyyy-MM-ddTHH:mm:ss", 31 sortableDateTime: "yyyy-MM-ddTHH:mm:ss",
32 universalSortableDateTime: "yyyy-MM-dd HH:mm:ssZ", 32 universalSortableDateTime: "yyyy-MM-dd HH:mm:ssZ",
33 rfc1123: "ddd, dd MMM yyyy HH:mm:ss GMT", 33 rfc1123: "ddd, dd MMM yyyy HH:mm:ss GMT",
34 monthDay: "MMMM dd", 34 monthDay: "MMMM dd",
35 yearMonth: "MMMM, yyyy" 35 yearMonth: "MMMM, yyyy"
36 }, 36 },
37 regexPatterns: { 37 regexPatterns: {
38 jan: /^jan(uary)?/i, 38 jan: /^jan(uary)?/i,
39 feb: /^feb(ruary)?/i, 39 feb: /^feb(ruary)?/i,
40 mar: /^mar(ch)?/i, 40 mar: /^mar(ch)?/i,
41 apr: /^apr(il)?/i, 41 apr: /^apr(il)?/i,
42 may: /^may/i, 42 may: /^may/i,
43 jun: /^jun(e)?/i, 43 jun: /^jun(e)?/i,
44 jul: /^jul(y)?/i, 44 jul: /^jul(y)?/i,
45 aug: /^aug(ust)?/i, 45 aug: /^aug(ust)?/i,
46 sep: /^sep(t(ember)?)?/i, 46 sep: /^sep(t(ember)?)?/i,
47 oct: /^oct(ober)?/i, 47 oct: /^oct(ober)?/i,
48 nov: /^nov(ember)?/i, 48 nov: /^nov(ember)?/i,
49 dec: /^dec(ember)?/i, 49 dec: /^dec(ember)?/i,
50 sun: /^su(n(day)?)?/i, 50 sun: /^su(n(day)?)?/i,
51 mon: /^mo(n(day)?)?/i, 51 mon: /^mo(n(day)?)?/i,
52 tue: /^tu(e(s(day)?)?)?/i, 52 tue: /^tu(e(s(day)?)?)?/i,
53 wed: /^we(d(nesday)?)?/i, 53 wed: /^we(d(nesday)?)?/i,
54 thu: /^th(u(r(s(day)?)?)?)?/i, 54 thu: /^th(u(r(s(day)?)?)?)?/i,
55 fri: /^fr(i(day)?)?/i, 55 fri: /^fr(i(day)?)?/i,
56 sat: /^sa(t(urday)?)?/i, 56 sat: /^sa(t(urday)?)?/i,
57 future: /^next/i, 57 future: /^next/i,
58 past: /^last|past|prev(ious)?/i, 58 past: /^last|past|prev(ious)?/i,
59 add: /^(\+|aft(er)?|from|hence)/i, 59 add: /^(\+|aft(er)?|from|hence)/i,
60 subtract: /^(\-|bef(ore)?|ago)/i, 60 subtract: /^(\-|bef(ore)?|ago)/i,
61 yesterday: /^yes(terday)?/i, 61 yesterday: /^yes(terday)?/i,
62 today: /^t(od(ay)?)?/i, 62 today: /^t(od(ay)?)?/i,
63 tomorrow: /^tom(orrow)?/i, 63 tomorrow: /^tom(orrow)?/i,
64 now: /^n(ow)?/i, 64 now: /^n(ow)?/i,
65 millisecond: /^ms|milli(second)?s?/i, 65 millisecond: /^ms|milli(second)?s?/i,
66 second: /^sec(ond)?s?/i, 66 second: /^sec(ond)?s?/i,
67 minute: /^mn|min(ute)?s?/i, 67 minute: /^mn|min(ute)?s?/i,
68 hour: /^h(our)?s?/i, 68 hour: /^h(our)?s?/i,
69 week: /^w(eek)?s?/i, 69 week: /^w(eek)?s?/i,
70 month: /^m(onth)?s?/i, 70 month: /^m(onth)?s?/i,
71 day: /^d(ay)?s?/i, 71 day: /^d(ay)?s?/i,
72 year: /^y(ear)?s?/i, 72 year: /^y(ear)?s?/i,
73 shortMeridian: /^(a|p)/i, 73 shortMeridian: /^(a|p)/i,
74 longMeridian: /^(a\.?m?\.?|p\.?m?\.?)/i, 74 longMeridian: /^(a\.?m?\.?|p\.?m?\.?)/i,
75 timezone: /^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i, 75 timezone: /^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,
76 ordinalSuffix: /^\s*(st|nd|rd|th)/i, 76 ordinalSuffix: /^\s*(st|nd|rd|th)/i,
77 timeContext: /^\s*(\:|a(?!u|p)|p)/i 77 timeContext: /^\s*(\:|a(?!u|p)|p)/i
78 }, 78 },
79 timezones: [{ 79 timezones: [{
80 name: "UTC", 80 name: "UTC",
81 offset: "-000" 81 offset: "-000"
82 }, { 82 }, {
83 name: "GMT", 83 name: "GMT",
84 offset: "-000" 84 offset: "-000"
85 }, { 85 }, {
86 name: "EST", 86 name: "EST",
87 offset: "-0500" 87 offset: "-0500"
88 }, { 88 }, {
89 name: "EDT", 89 name: "EDT",
90 offset: "-0400" 90 offset: "-0400"
91 }, { 91 }, {
92 name: "CST", 92 name: "CST",
93 offset: "-0600" 93 offset: "-0600"
94 }, { 94 }, {
95 name: "CDT", 95 name: "CDT",
96 offset: "-0500" 96 offset: "-0500"
97 }, { 97 }, {
98 name: "MST", 98 name: "MST",
99 offset: "-0700" 99 offset: "-0700"
100 }, { 100 }, {
101 name: "MDT", 101 name: "MDT",
102 offset: "-0600" 102 offset: "-0600"
103 }, { 103 }, {
104 name: "PST", 104 name: "PST",
105 offset: "-0800" 105 offset: "-0800"
106 }, { 106 }, {
107 name: "PDT", 107 name: "PDT",
108 offset: "-0700" 108 offset: "-0700"
109 }] 109 }]
110 }; 110 };
111 (function () { 111 (function () {
112 var $D = Date, 112 var $D = Date,
113 $P = $D.prototype, 113 $P = $D.prototype,
114 $C = $D.CultureInfo, 114 $C = $D.CultureInfo,
115 p = function (s, l) { 115 p = function (s, l) {
116 if (!l) { 116 if (!l) {
117 l = 2; 117 l = 2;
118 } 118 }
119 return ("000" + s).slice(l * -1); 119 return ("000" + s).slice(l * -1);
120 }; 120 };
121 $P.clearTime = function () { 121 $P.clearTime = function () {
122 this.setHours(0); 122 this.setHours(0);
123 this.setMinutes(0); 123 this.setMinutes(0);
124 this.setSeconds(0); 124 this.setSeconds(0);
125 this.setMilliseconds(0); 125 this.setMilliseconds(0);
126 return this; 126 return this;
127 }; 127 };
128 $P.setTimeToNow = function () { 128 $P.setTimeToNow = function () {
129 var n = new Date(); 129 var n = new Date();
130 this.setHours(n.getHours()); 130 this.setHours(n.getHours());
131 this.setMinutes(n.getMinutes()); 131 this.setMinutes(n.getMinutes());
132 this.setSeconds(n.getSeconds()); 132 this.setSeconds(n.getSeconds());
133 this.setMilliseconds(n.getMilliseconds()); 133 this.setMilliseconds(n.getMilliseconds());
134 return this; 134 return this;
135 }; 135 };
136 $D.today = function () { 136 $D.today = function () {
137 return new Date().clearTime(); 137 return new Date().clearTime();
138 }; 138 };
139 $D.compare = function (date1, date2) { 139 $D.compare = function (date1, date2) {
140 if (isNaN(date1) || isNaN(date2)) { 140 if (isNaN(date1) || isNaN(date2)) {
141 throw new Error(date1 + " - " + date2); 141 throw new Error(date1 + " - " + date2);
142 } else if (date1 instanceof Date && date2 instanceof Date) { 142 } else if (date1 instanceof Date && date2 instanceof Date) {
143 return (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0; 143 return (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;
144 } else { 144 } else {
145 throw new TypeError(date1 + " - " + date2); 145 throw new TypeError(date1 + " - " + date2);
146 } 146 }
147 }; 147 };
148 $D.equals = function (date1, date2) { 148 $D.equals = function (date1, date2) {
149 return (date1.compareTo(date2) === 0); 149 return (date1.compareTo(date2) === 0);
150 }; 150 };
151 $D.getDayNumberFromName = function (name) { 151 $D.getDayNumberFromName = function (name) {
152 var n = $C.dayNames, 152 var n = $C.dayNames,
153 m = $C.abbreviatedDayNames, 153 m = $C.abbreviatedDayNames,
154 o = $C.shortestDayNames, 154 o = $C.shortestDayNames,
155 s = name.toLowerCase(); 155 s = name.toLowerCase();
156 for (var i = 0; i < n.length; i++) { 156 for (var i = 0; i < n.length; i++) {
157 if (n[i].toLowerCase() == s || m[i].toLowerCase() == s || o[i].toLowerCase() == s) { 157 if (n[i].toLowerCase() == s || m[i].toLowerCase() == s || o[i].toLowerCase() == s) {
158 return i; 158 return i;
159 } 159 }
160 } 160 }
161 return -1; 161 return -1;
162 }; 162 };
163 $D.getMonthNumberFromName = function (name) { 163 $D.getMonthNumberFromName = function (name) {
164 var n = $C.monthNames, 164 var n = $C.monthNames,
165 m = $C.abbreviatedMonthNames, 165 m = $C.abbreviatedMonthNames,
166 s = name.toLowerCase(); 166 s = name.toLowerCase();
167 for (var i = 0; i < n.length; i++) { 167 for (var i = 0; i < n.length; i++) {
168 if (n[i].toLowerCase() == s || m[i].toLowerCase() == s) { 168 if (n[i].toLowerCase() == s || m[i].toLowerCase() == s) {
169 return i; 169 return i;
170 } 170 }
171 } 171 }
172 return -1; 172 return -1;
173 }; 173 };
174 $D.isLeapYear = function (year) { 174 $D.isLeapYear = function (year) {
175 return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); 175 return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
176 }; 176 };
177 $D.getDaysInMonth = function (year, month) { 177 $D.getDaysInMonth = function (year, month) {
178 return [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; 178 return [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
179 }; 179 };
180 $D.getTimezoneAbbreviation = function (offset) { 180 $D.getTimezoneAbbreviation = function (offset) {
181 var z = $C.timezones, 181 var z = $C.timezones,
182 p; 182 p;
183 for (var i = 0; i < z.length; i++) { 183 for (var i = 0; i < z.length; i++) {
184 if (z[i].offset === offset) { 184 if (z[i].offset === offset) {
185 return z[i].name; 185 return z[i].name;
186 } 186 }
187 } 187 }
188 return null; 188 return null;
189 }; 189 };
190 $D.getTimezoneOffset = function (name) { 190 $D.getTimezoneOffset = function (name) {
191 var z = $C.timezones, 191 var z = $C.timezones,
192 p; 192 p;
193 for (var i = 0; i < z.length; i++) { 193 for (var i = 0; i < z.length; i++) {
194 if (z[i].name === name.toUpperCase()) { 194 if (z[i].name === name.toUpperCase()) {
195 return z[i].offset; 195 return z[i].offset;
196 } 196 }
197 } 197 }
198 return null; 198 return null;
199 }; 199 };
200 $P.clone = function () { 200 $P.clone = function () {
201 return new Date(this.getTime()); 201 return new Date(this.getTime());
202 }; 202 };
203 $P.compareTo = function (date) { 203 $P.compareTo = function (date) {
204 return Date.compare(this, date); 204 return Date.compare(this, date);
205 }; 205 };
206 $P.equals = function (date) { 206 $P.equals = function (date) {
207 return Date.equals(this, date || new Date()); 207 return Date.equals(this, date || new Date());
208 }; 208 };
209 $P.between = function (start, end) { 209 $P.between = function (start, end) {
210 return this.getTime() >= start.getTime() && this.getTime() <= end.getTime(); 210 return this.getTime() >= start.getTime() && this.getTime() <= end.getTime();
211 }; 211 };
212 $P.isAfter = function (date) { 212 $P.isAfter = function (date) {
213 return this.compareTo(date || new Date()) === 1; 213 return this.compareTo(date || new Date()) === 1;
214 }; 214 };
215 $P.isBefore = function (date) { 215 $P.isBefore = function (date) {
216 return (this.compareTo(date || new Date()) === -1); 216 return (this.compareTo(date || new Date()) === -1);
217 }; 217 };
218 $P.isToday = function () { 218 $P.isToday = function () {
219 return this.isSameDay(new Date()); 219 return this.isSameDay(new Date());
220 }; 220 };
221 $P.isSameDay = function (date) { 221 $P.isSameDay = function (date) {
222 return this.clone().clearTime().equals(date.clone().clearTime()); 222 return this.clone().clearTime().equals(date.clone().clearTime());
223 }; 223 };
224 $P.addMilliseconds = function (value) { 224 $P.addMilliseconds = function (value) {
225 this.setMilliseconds(this.getMilliseconds() + value); 225 this.setMilliseconds(this.getMilliseconds() + value);
226 return this; 226 return this;
227 }; 227 };
228 $P.addSeconds = function (value) { 228 $P.addSeconds = function (value) {
229 return this.addMilliseconds(value * 1000); 229 return this.addMilliseconds(value * 1000);
230 }; 230 };
231 $P.addMinutes = function (value) { 231 $P.addMinutes = function (value) {
232 return this.addMilliseconds(value * 60000); 232 return this.addMilliseconds(value * 60000);
233 }; 233 };
234 $P.addHours = function (value) { 234 $P.addHours = function (value) {
235 return this.addMilliseconds(value * 3600000); 235 return this.addMilliseconds(value * 3600000);
236 }; 236 };
237 $P.addDays = function (value) { 237 $P.addDays = function (value) {
238 this.setDate(this.getDate() + value); 238 this.setDate(this.getDate() + value);
239 return this; 239 return this;
240 }; 240 };
241 $P.addWeeks = function (value) { 241 $P.addWeeks = function (value) {
242 return this.addDays(value * 7); 242 return this.addDays(value * 7);
243 }; 243 };
244 $P.addMonths = function (value) { 244 $P.addMonths = function (value) {
245 var n = this.getDate(); 245 var n = this.getDate();
246 this.setDate(1); 246 this.setDate(1);
247 this.setMonth(this.getMonth() + value); 247 this.setMonth(this.getMonth() + value);
248 this.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth()))); 248 this.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));
249 return this; 249 return this;
250 }; 250 };
251 $P.addYears = function (value) { 251 $P.addYears = function (value) {
252 return this.addMonths(value * 12); 252 return this.addMonths(value * 12);
253 }; 253 };
254 $P.add = function (config) { 254 $P.add = function (config) {
255 if (typeof config == "number") { 255 if (typeof config == "number") {
256 this._orient = config; 256 this._orient = config;
257 return this; 257 return this;
258 } 258 }
259 var x = config; 259 var x = config;
260 if (x.milliseconds) { 260 if (x.milliseconds) {
261 this.addMilliseconds(x.milliseconds); 261 this.addMilliseconds(x.milliseconds);
262 } 262 }
263 if (x.seconds) { 263 if (x.seconds) {
264 this.addSeconds(x.seconds); 264 this.addSeconds(x.seconds);
265 } 265 }
266 if (x.minutes) { 266 if (x.minutes) {
267 this.addMinutes(x.minutes); 267 this.addMinutes(x.minutes);
268 } 268 }
269 if (x.hours) { 269 if (x.hours) {
270 this.addHours(x.hours); 270 this.addHours(x.hours);
271 } 271 }
272 if (x.weeks) { 272 if (x.weeks) {
273 this.addWeeks(x.weeks); 273 this.addWeeks(x.weeks);
274 } 274 }
275 if (x.months) { 275 if (x.months) {
276 this.addMonths(x.months); 276 this.addMonths(x.months);
277 } 277 }
278 if (x.years) { 278 if (x.years) {
279 this.addYears(x.years); 279 this.addYears(x.years);
280 } 280 }
281 if (x.days) { 281 if (x.days) {
282 this.addDays(x.days); 282 this.addDays(x.days);
283 } 283 }
284 return this; 284 return this;
285 }; 285 };
286 var $y, $m, $d; 286 var $y, $m, $d;
287 $P.getWeek = function () { 287 $P.getWeek = function () {
288 var a, b, c, d, e, f, g, n, s, w; 288 var a, b, c, d, e, f, g, n, s, w;
289 $y = (!$y) ? this.getFullYear() : $y; 289 $y = (!$y) ? this.getFullYear() : $y;
290 $m = (!$m) ? this.getMonth() + 1 : $m; 290 $m = (!$m) ? this.getMonth() + 1 : $m;
291 $d = (!$d) ? this.getDate() : $d; 291 $d = (!$d) ? this.getDate() : $d;
292 if ($m <= 2) { 292 if ($m <= 2) {
293 a = $y - 1; 293 a = $y - 1;
294 b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0); 294 b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0);
295 c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0); 295 c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0);
296 s = b - c; 296 s = b - c;
297 e = 0; 297 e = 0;
298 f = $d - 1 + (31 * ($m - 1)); 298 f = $d - 1 + (31 * ($m - 1));
299 } else { 299 } else {
300 a = $y; 300 a = $y;
301 b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0); 301 b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0);
302 c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0); 302 c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0);
303 s = b - c; 303 s = b - c;
304 e = s + 1; 304 e = s + 1;
305 f = $d + ((153 * ($m - 3) + 2) / 5) + 58 + s; 305 f = $d + ((153 * ($m - 3) + 2) / 5) + 58 + s;
306 } 306 }
307 g = (a + b) % 7; 307 g = (a + b) % 7;
308 d = (f + g - e) % 7; 308 d = (f + g - e) % 7;
309 n = (f + 3 - d) | 0; 309 n = (f + 3 - d) | 0;
310 if (n < 0) { 310 if (n < 0) {
311 w = 53 - ((g - s) / 5 | 0); 311 w = 53 - ((g - s) / 5 | 0);
312 } else if (n > 364 + s) { 312 } else if (n > 364 + s) {
313 w = 1; 313 w = 1;
314 } else { 314 } else {
315 w = (n / 7 | 0) + 1; 315 w = (n / 7 | 0) + 1;
316 } 316 }
317 $y = $m = $d = null; 317 $y = $m = $d = null;
318 return w; 318 return w;
319 }; 319 };
320 $P.getISOWeek = function () { 320 $P.getISOWeek = function () {
321 $y = this.getUTCFullYear(); 321 $y = this.getUTCFullYear();
322 $m = this.getUTCMonth() + 1; 322 $m = this.getUTCMonth() + 1;
323 $d = this.getUTCDate(); 323 $d = this.getUTCDate();
324 return p(this.getWeek()); 324 return p(this.getWeek());
325 }; 325 };
326 $P.setWeek = function (n) { 326 $P.setWeek = function (n) {
327 return this.moveToDayOfWeek(1).addWeeks(n - this.getWeek()); 327 return this.moveToDayOfWeek(1).addWeeks(n - this.getWeek());
328 }; 328 };
329 $D._validate = function (n, min, max, name) { 329 $D._validate = function (n, min, max, name) {
330 if (typeof n == "undefined") { 330 if (typeof n == "undefined") {
331 return false; 331 return false;
332 } else if (typeof n != "number") { 332 } else if (typeof n != "number") {
333 throw new TypeError(n + " is not a Number."); 333 throw new TypeError(n + " is not a Number.");
334 } else if (n < min || n > max) { 334 } else if (n < min || n > max) {
335 throw new RangeError(n + " is not a valid value for " + name + "."); 335 throw new RangeError(n + " is not a valid value for " + name + ".");
336 } 336 }
337 return true; 337 return true;
338 }; 338 };
339 $D.validateMillisecond = function (value) { 339 $D.validateMillisecond = function (value) {
340 return $D._validate(value, 0, 999, "millisecond"); 340 return $D._validate(value, 0, 999, "millisecond");
341 }; 341 };
342 $D.validateSecond = function (value) { 342 $D.validateSecond = function (value) {
343 return $D._validate(value, 0, 59, "second"); 343 return $D._validate(value, 0, 59, "second");
344 }; 344 };
345 $D.validateMinute = function (value) { 345 $D.validateMinute = function (value) {
346 return $D._validate(value, 0, 59, "minute"); 346 return $D._validate(value, 0, 59, "minute");
347 }; 347 };
348 $D.validateHour = function (value) { 348 $D.validateHour = function (value) {
349 return $D._validate(value, 0, 23, "hour"); 349 return $D._validate(value, 0, 23, "hour");
350 }; 350 };
351 $D.validateDay = function (value, year, month) { 351 $D.validateDay = function (value, year, month) {
352 return $D._validate(value, 1, $D.getDaysInMonth(year, month), "day"); 352 return $D._validate(value, 1, $D.getDaysInMonth(year, month), "day");
353 }; 353 };
354 $D.validateMonth = function (value) { 354 $D.validateMonth = function (value) {
355 return $D._validate(value, 0, 11, "month"); 355 return $D._validate(value, 0, 11, "month");
356 }; 356 };
357 $D.validateYear = function (value) { 357 $D.validateYear = function (value) {
358 return $D._validate(value, 0, 9999, "year"); 358 return $D._validate(value, 0, 9999, "year");
359 }; 359 };
360 $P.set = function (config) { 360 $P.set = function (config) {
361 if ($D.validateMillisecond(config.millisecond)) { 361 if ($D.validateMillisecond(config.millisecond)) {
362 this.addMilliseconds(config.millisecond - this.getMilliseconds()); 362 this.addMilliseconds(config.millisecond - this.getMilliseconds());
363 } 363 }
364 if ($D.validateSecond(config.second)) { 364 if ($D.validateSecond(config.second)) {
365 this.addSeconds(config.second - this.getSeconds()); 365 this.addSeconds(config.second - this.getSeconds());
366 } 366 }
367 if ($D.validateMinute(config.minute)) { 367 if ($D.validateMinute(config.minute)) {
368 this.addMinutes(config.minute - this.getMinutes()); 368 this.addMinutes(config.minute - this.getMinutes());
369 } 369 }
370 if ($D.validateHour(config.hour)) { 370 if ($D.validateHour(config.hour)) {
371 this.addHours(config.hour - this.getHours()); 371 this.addHours(config.hour - this.getHours());
372 } 372 }
373 if ($D.validateMonth(config.month)) { 373 if ($D.validateMonth(config.month)) {
374 this.addMonths(config.month - this.getMonth()); 374 this.addMonths(config.month - this.getMonth());
375 } 375 }
376 if ($D.validateYear(config.year)) { 376 if ($D.validateYear(config.year)) {
377 this.addYears(config.year - this.getFullYear()); 377 this.addYears(config.year - this.getFullYear());
378 } 378 }
379 if ($D.validateDay(config.day, this.getFullYear(), this.getMonth())) { 379 if ($D.validateDay(config.day, this.getFullYear(), this.getMonth())) {
380 this.addDays(config.day - this.getDate()); 380 this.addDays(config.day - this.getDate());
381 } 381 }
382 if (config.timezone) { 382 if (config.timezone) {
383 this.setTimezone(config.timezone); 383 this.setTimezone(config.timezone);
384 } 384 }
385 if (config.timezoneOffset) { 385 if (config.timezoneOffset) {
386 this.setTimezoneOffset(config.timezoneOffset); 386 this.setTimezoneOffset(config.timezoneOffset);
387 } 387 }
388 if (config.week && $D._validate(config.week, 0, 53, "week")) { 388 if (config.week && $D._validate(config.week, 0, 53, "week")) {
389 this.setWeek(config.week); 389 this.setWeek(config.week);
390 } 390 }
391 return this; 391 return this;
392 }; 392 };
393 $P.moveToFirstDayOfMonth = function () { 393 $P.moveToFirstDayOfMonth = function () {
394 return this.set({ 394 return this.set({
395 day: 1 395 day: 1
396 }); 396 });
397 }; 397 };
398 $P.moveToLastDayOfMonth = function () { 398 $P.moveToLastDayOfMonth = function () {
399 return this.set({ 399 return this.set({
400 day: $D.getDaysInMonth(this.getFullYear(), this.getMonth()) 400 day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())
401 }); 401 });
402 }; 402 };
403 $P.moveToNthOccurrence = function (dayOfWeek, occurrence) { 403 $P.moveToNthOccurrence = function (dayOfWeek, occurrence) {
404 var shift = 0; 404 var shift = 0;
405 if (occurrence > 0) { 405 if (occurrence > 0) {
406 shift = occurrence - 1; 406 shift = occurrence - 1;
407 } else if (occurrence === -1) { 407 } else if (occurrence === -1) {
408 this.moveToLastDayOfMonth(); 408 this.moveToLastDayOfMonth();
409 if (this.getDay() !== dayOfWeek) { 409 if (this.getDay() !== dayOfWeek) {
410 this.moveToDayOfWeek(dayOfWeek, -1); 410 this.moveToDayOfWeek(dayOfWeek, -1);
411 } 411 }
412 return this; 412 return this;
413 } 413 }
414 return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift); 414 return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);
415 }; 415 };
416 $P.moveToDayOfWeek = function (dayOfWeek, orient) { 416 $P.moveToDayOfWeek = function (dayOfWeek, orient) {
417 var diff = (dayOfWeek - this.getDay() + 7 * (orient || +1)) % 7; 417 var diff = (dayOfWeek - this.getDay() + 7 * (orient || +1)) % 7;
418 return this.addDays((diff === 0) ? diff += 7 * (orient || +1) : diff); 418 return this.addDays((diff === 0) ? diff += 7 * (orient || +1) : diff);
419 }; 419 };
420 $P.moveToMonth = function (month, orient) { 420 $P.moveToMonth = function (month, orient) {
421 var diff = (month - this.getMonth() + 12 * (orient || +1)) % 12; 421 var diff = (month - this.getMonth() + 12 * (orient || +1)) % 12;
422 return this.addMonths((diff === 0) ? diff += 12 * (orient || +1) : diff); 422 return this.addMonths((diff === 0) ? diff += 12 * (orient || +1) : diff);
423 }; 423 };
424 $P.getOrdinalNumber = function () { 424 $P.getOrdinalNumber = function () {
425 return Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1; 425 return Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;
426 }; 426 };
427 $P.getTimezone = function () { 427 $P.getTimezone = function () {
428 return $D.getTimezoneAbbreviation(this.getUTCOffset()); 428 return $D.getTimezoneAbbreviation(this.getUTCOffset());
429 }; 429 };
430 $P.setTimezoneOffset = function (offset) { 430 $P.setTimezoneOffset = function (offset) {
431 var here = this.getTimezoneOffset(), 431 var here = this.getTimezoneOffset(),
432 there = Number(offset) * -6 / 10; 432 there = Number(offset) * -6 / 10;
433 return this.addMinutes(there - here); 433 return this.addMinutes(there - here);
434 }; 434 };
435 $P.setTimezone = function (offset) { 435 $P.setTimezone = function (offset) {
436 return this.setTimezoneOffset($D.getTimezoneOffset(offset)); 436 return this.setTimezoneOffset($D.getTimezoneOffset(offset));
437 }; 437 };
438 $P.hasDaylightSavingTime = function () { 438 $P.hasDaylightSavingTime = function () {
439 return (Date.today().set({ 439 return (Date.today().set({
440 month: 0, 440 month: 0,
441 day: 1 441 day: 1
442 }).getTimezoneOffset() !== Date.today().set({ 442 }).getTimezoneOffset() !== Date.today().set({
443 month: 6, 443 month: 6,
444 day: 1 444 day: 1
445 }).getTimezoneOffset()); 445 }).getTimezoneOffset());
446 }; 446 };
447 $P.isDaylightSavingTime = function () { 447 $P.isDaylightSavingTime = function () {
448 return (this.hasDaylightSavingTime() && new Date().getTimezoneOffset() === Date.today().set({ 448 return (this.hasDaylightSavingTime() && new Date().getTimezoneOffset() === Date.today().set({
449 month: 6, 449 month: 6,
450 day: 1 450 day: 1
451 }).getTimezoneOffset()); 451 }).getTimezoneOffset());
452 }; 452 };
453 $P.getUTCOffset = function () { 453 $P.getUTCOffset = function () {
454 var n = this.getTimezoneOffset() * -10 / 6, 454 var n = this.getTimezoneOffset() * -10 / 6,
455 r; 455 r;
456 if (n < 0) { 456 if (n < 0) {
457 r = (n - 10000).toString(); 457 r = (n - 10000).toString();
458 return r.charAt(0) + r.substr(2); 458 return r.charAt(0) + r.substr(2);
459 } else { 459 } else {
460 r = (n + 10000).toString(); 460 r = (n + 10000).toString();
461 return "+" + r.substr(1); 461 return "+" + r.substr(1);
462 } 462 }
463 }; 463 };
464 $P.getElapsed = function (date) { 464 $P.getElapsed = function (date) {
465 return (date || new Date()) - this; 465 return (date || new Date()) - this;
466 }; 466 };
467 if (!$P.toISOString) { 467 if (!$P.toISOString) {
468 $P.toISOString = function () { 468 $P.toISOString = function () {
469 function f(n) { 469 function f(n) {
470 return n < 10 ? '0' + n : n; 470 return n < 10 ? '0' + n : n;
471 } 471 }
472 return '"' + this.getUTCFullYear() + '-' + 472 return '"' + this.getUTCFullYear() + '-' +
473 f(this.getUTCMonth() + 1) + '-' + 473 f(this.getUTCMonth() + 1) + '-' +
474 f(this.getUTCDate()) + 'T' + 474 f(this.getUTCDate()) + 'T' +
475 f(this.getUTCHours()) + ':' + 475 f(this.getUTCHours()) + ':' +
476 f(this.getUTCMinutes()) + ':' + 476 f(this.getUTCMinutes()) + ':' +
477 f(this.getUTCSeconds()) + 'Z"'; 477 f(this.getUTCSeconds()) + 'Z"';
478 }; 478 };
479 } 479 }
480 $P._toString = $P.toString; 480 $P._toString = $P.toString;
481 $P.toString = function (format) { 481 $P.toString = function (format) {
482 var x = this; 482 var x = this;
483 if (format && format.length == 1) { 483 if (format && format.length == 1) {
484 var c = $C.formatPatterns; 484 var c = $C.formatPatterns;
485 x.t = x.toString; 485 x.t = x.toString;
486 switch (format) { 486 switch (format) {
487 case "d": 487 case "d":
488 return x.t(c.shortDate); 488 return x.t(c.shortDate);
489 case "D": 489 case "D":
490 return x.t(c.longDate); 490 return x.t(c.longDate);
491 case "F": 491 case "F":
492 return x.t(c.fullDateTime); 492 return x.t(c.fullDateTime);
493 case "m": 493 case "m":
494 return x.t(c.monthDay); 494 return x.t(c.monthDay);
495 case "r": 495 case "r":
496 return x.t(c.rfc1123); 496 return x.t(c.rfc1123);
497 case "s": 497 case "s":
498 return x.t(c.sortableDateTime); 498 return x.t(c.sortableDateTime);
499 case "t": 499 case "t":
500 return x.t(c.shortTime); 500 return x.t(c.shortTime);
501 case "T": 501 case "T":
502 return x.t(c.longTime); 502 return x.t(c.longTime);
503 case "u": 503 case "u":
504 return x.t(c.universalSortableDateTime); 504 return x.t(c.universalSortableDateTime);
505 case "y": 505 case "y":
506 return x.t(c.yearMonth); 506 return x.t(c.yearMonth);
507 } 507 }
508 } 508 }
509 var ord = function (n) { 509 var ord = function (n) {
510 switch (n * 1) { 510 switch (n * 1) {
511 case 1: 511 case 1:
512 case 21: 512 case 21:
513 case 31: 513 case 31:
514 return "st"; 514 return "st";
515 case 2: 515 case 2:
516 case 22: 516 case 22:
517 return "nd"; 517 return "nd";
518 case 3: 518 case 3:
519 case 23: 519 case 23:
520 return "rd"; 520 return "rd";
521 default: 521 default:
522 return "th"; 522 return "th";
523 } 523 }
524 }; 524 };
525 return format ? format.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g, function (m) { 525 return format ? format.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g, function (m) {
526 if (m.charAt(0) === "\\") { 526 if (m.charAt(0) === "\\") {
527 return m.replace("\\", ""); 527 return m.replace("\\", "");
528 } 528 }
529 x.h = x.getHours; 529 x.h = x.getHours;
530 switch (m) { 530 switch (m) {
531 case "hh": 531 case "hh":
532 return p(x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12)); 532 return p(x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12));
533 case "h": 533 case "h":
534 return x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12); 534 return x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12);
535 case "HH": 535 case "HH":
536 return p(x.h()); 536 return p(x.h());
537 case "H": 537 case "H":
538 return x.h(); 538 return x.h();
539 case "mm": 539 case "mm":
540 return p(x.getMinutes()); 540 return p(x.getMinutes());
541 case "m": 541 case "m":
542 return x.getMinutes(); 542 return x.getMinutes();
543 case "ss": 543 case "ss":
544 return p(x.getSeconds()); 544 return p(x.getSeconds());
545 case "s": 545 case "s":
546 return x.getSeconds(); 546 return x.getSeconds();
547 case "yyyy": 547 case "yyyy":
548 return p(x.getFullYear(), 4); 548 return p(x.getFullYear(), 4);
549 case "yy": 549 case "yy":
550 return p(x.getFullYear()); 550 return p(x.getFullYear());
551 case "dddd": 551 case "dddd":
552 return $C.dayNames[x.getDay()]; 552 return $C.dayNames[x.getDay()];
553 case "ddd": 553 case "ddd":
554 return $C.abbreviatedDayNames[x.getDay()]; 554 return $C.abbreviatedDayNames[x.getDay()];
555 case "dd": 555 case "dd":
556 return p(x.getDate()); 556 return p(x.getDate());
557 case "d": 557 case "d":
558 return x.getDate(); 558 return x.getDate();
559 case "MMMM": 559 case "MMMM":
560 return $C.monthNames[x.getMonth()]; 560 return $C.monthNames[x.getMonth()];
561 case "MMM": 561 case "MMM":
562 return $C.abbreviatedMonthNames[x.getMonth()]; 562 return $C.abbreviatedMonthNames[x.getMonth()];
563 case "MM": 563 case "MM":
564 return p((x.getMonth() + 1)); 564 return p((x.getMonth() + 1));
565 case "M": 565 case "M":
566 return x.getMonth() + 1; 566 return x.getMonth() + 1;
567 case "t": 567 case "t":
568 return x.h() < 12 ? $C.amDesignator.substring(0, 1) : $C.pmDesignator.substring(0, 1); 568 return x.h() < 12 ? $C.amDesignator.substring(0, 1) : $C.pmDesignator.substring(0, 1);
569 case "tt": 569 case "tt":
570 return x.h() < 12 ? $C.amDesignator : $C.pmDesignator; 570 return x.h() < 12 ? $C.amDesignator : $C.pmDesignator;
571 case "S": 571 case "S":
572 return ord(x.getDate()); 572 return ord(x.getDate());
573 default: 573 default:
574 return m; 574 return m;
575 } 575 }
576 }) : this._toString(); 576 }) : this._toString();
577 }; 577 };
578 }()); 578 }());
579 (function () { 579 (function () {
580 var $D = Date, 580 var $D = Date,
581 $P = $D.prototype, 581 $P = $D.prototype,
582 $C = $D.CultureInfo, 582 $C = $D.CultureInfo,
583 $N = Number.prototype; 583 $N = Number.prototype;
584 $P._orient = +1; 584 $P._orient = +1;
585 $P._nth = null; 585 $P._nth = null;
586 $P._is = false; 586 $P._is = false;
587 $P._same = false; 587 $P._same = false;
588 $P._isSecond = false; 588 $P._isSecond = false;
589 $N._dateElement = "day"; 589 $N._dateElement = "day";
590 $P.next = function () { 590 $P.next = function () {
591 this._orient = +1; 591 this._orient = +1;
592 return this; 592 return this;
593 }; 593 };
594 $D.next = function () { 594 $D.next = function () {
595 return $D.today().next(); 595 return $D.today().next();
596 }; 596 };
597 $P.last = $P.prev = $P.previous = function () { 597 $P.last = $P.prev = $P.previous = function () {
598 this._orient = -1; 598 this._orient = -1;
599 return this; 599 return this;
600 }; 600 };
601 $D.last = $D.prev = $D.previous = function () { 601 $D.last = $D.prev = $D.previous = function () {
602 return $D.today().last(); 602 return $D.today().last();
603 }; 603 };
604 $P.is = function () { 604 $P.is = function () {
605 this._is = true; 605 this._is = true;
606 return this; 606 return this;
607 }; 607 };
608 $P.same = function () { 608 $P.same = function () {
609 this._same = true; 609 this._same = true;
610 this._isSecond = false; 610 this._isSecond = false;
611 return this; 611 return this;
612 }; 612 };
613 $P.today = function () { 613 $P.today = function () {
614 return this.same().day(); 614 return this.same().day();
615 }; 615 };
616 $P.weekday = function () { 616 $P.weekday = function () {
617 if (this._is) { 617 if (this._is) {
618 this._is = false; 618 this._is = false;
619 return (!this.is().sat() && !this.is().sun()); 619 return (!this.is().sat() && !this.is().sun());
620 } 620 }
621 return false; 621 return false;
622 }; 622 };
623 $P.at = function (time) { 623 $P.at = function (time) {
624 return (typeof time === "string") ? $D.parse(this.toString("d") + " " + time) : this.set(time); 624 return (typeof time === "string") ? $D.parse(this.toString("d") + " " + time) : this.set(time);
625 }; 625 };
626 $N.fromNow = $N.after = function (date) { 626 $N.fromNow = $N.after = function (date) {
627 var c = {}; 627 var c = {};
628 c[this._dateElement] = this; 628 c[this._dateElement] = this;
629 return ((!date) ? new Date() : date.clone()).add(c); 629 return ((!date) ? new Date() : date.clone()).add(c);
630 }; 630 };
631 $N.ago = $N.before = function (date) { 631 $N.ago = $N.before = function (date) {
632 var c = {}; 632 var c = {};
633 c[this._dateElement] = this * -1; 633 c[this._dateElement] = this * -1;
634 return ((!date) ? new Date() : date.clone()).add(c); 634 return ((!date) ? new Date() : date.clone()).add(c);
635 }; 635 };
636 var dx = ("sunday monday tuesday wednesday thursday friday saturday").split(/\s/), 636 var dx = ("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),
637 mx = ("january february march april may june july august september october november december").split(/\s/), 637 mx = ("january february march april may june july august september october november december").split(/\s/),
638 px = ("Millisecond Second Minute Hour Day Week Month Year").split(/\s/), 638 px = ("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),
639 pxf = ("Milliseconds Seconds Minutes Hours Date Week Month FullYear").split(/\s/), 639 pxf = ("Milliseconds Seconds Minutes Hours Date Week Month FullYear").split(/\s/),
640 nth = ("final first second third fourth fifth").split(/\s/), 640 nth = ("final first second third fourth fifth").split(/\s/),
641 de; 641 de;
642 $P.toObject = function () { 642 $P.toObject = function () {
643 var o = {}; 643 var o = {};
644 for (var i = 0; i < px.length; i++) { 644 for (var i = 0; i < px.length; i++) {
645 o[px[i].toLowerCase()] = this["get" + pxf[i]](); 645 o[px[i].toLowerCase()] = this["get" + pxf[i]]();
646 } 646 }
647 return o; 647 return o;
648 }; 648 };
649 $D.fromObject = function (config) { 649 $D.fromObject = function (config) {
650 config.week = null; 650 config.week = null;
651 return Date.today().set(config); 651 return Date.today().set(config);
652 }; 652 };
653 var df = function (n) { 653 var df = function (n) {
654 return function () { 654 return function () {
655 if (this._is) { 655 if (this._is) {
656 this._is = false; 656 this._is = false;
657 return this.getDay() == n; 657 return this.getDay() == n;
658 } 658 }
659 if (this._nth !== null) { 659 if (this._nth !== null) {
660 if (this._isSecond) { 660 if (this._isSecond) {
661 this.addSeconds(this._orient * -1); 661 this.addSeconds(this._orient * -1);
662 } 662 }
663 this._isSecond = false; 663 this._isSecond = false;
664 var ntemp = this._nth; 664 var ntemp = this._nth;
665 this._nth = null; 665 this._nth = null;
666 var temp = this.clone().moveToLastDayOfMonth(); 666 var temp = this.clone().moveToLastDayOfMonth();
667 this.moveToNthOccurrence(n, ntemp); 667 this.moveToNthOccurrence(n, ntemp);
668 if (this > temp) { 668 if (this > temp) {
669 throw new RangeError($D.getDayName(n) + " does not occur " + ntemp + " times in the month of " + $D.getMonthName(temp.getMonth()) + " " + temp.getFullYear() + "."); 669 throw new RangeError($D.getDayName(n) + " does not occur " + ntemp + " times in the month of " + $D.getMonthName(temp.getMonth()) + " " + temp.getFullYear() + ".");
670 } 670 }
671 return this; 671 return this;
672 } 672 }
673 return this.moveToDayOfWeek(n, this._orient); 673 return this.moveToDayOfWeek(n, this._orient);
674 }; 674 };
675 }; 675 };
676 var sdf = function (n) { 676 var sdf = function (n) {
677 return function () { 677 return function () {
678 var t = $D.today(), 678 var t = $D.today(),
679 shift = n - t.getDay(); 679 shift = n - t.getDay();
680 if (n === 0 && $C.firstDayOfWeek === 1 && t.getDay() !== 0) { 680 if (n === 0 && $C.firstDayOfWeek === 1 && t.getDay() !== 0) {
681 shift = shift + 7; 681 shift = shift + 7;
682 } 682 }
683 return t.addDays(shift); 683 return t.addDays(shift);
684 }; 684 };
685 }; 685 };
686 for (var i = 0; i < dx.length; i++) { 686 for (var i = 0; i < dx.length; i++) {
687 $D[dx[i].toUpperCase()] = $D[dx[i].toUpperCase().substring(0, 3)] = i; 687 $D[dx[i].toUpperCase()] = $D[dx[i].toUpperCase().substring(0, 3)] = i;
688 $D[dx[i]] = $D[dx[i].substring(0, 3)] = sdf(i); 688 $D[dx[i]] = $D[dx[i].substring(0, 3)] = sdf(i);
689 $P[dx[i]] = $P[dx[i].substring(0, 3)] = df(i); 689 $P[dx[i]] = $P[dx[i].substring(0, 3)] = df(i);
690 } 690 }
691 var mf = function (n) { 691 var mf = function (n) {
692 return function () { 692 return function () {
693 if (this._is) { 693 if (this._is) {
694 this._is = false; 694 this._is = false;
695 return this.getMonth() === n; 695 return this.getMonth() === n;
696 } 696 }
697 return this.moveToMonth(n, this._orient); 697 return this.moveToMonth(n, this._orient);
698 }; 698 };
699 }; 699 };
700 var smf = function (n) { 700 var smf = function (n) {
701 return function () { 701 return function () {
702 return $D.today().set({ 702 return $D.today().set({
703 month: n, 703 month: n,
704 day: 1 704 day: 1
705 }); 705 });
706 }; 706 };
707 }; 707 };
708 for (var j = 0; j < mx.length; j++) { 708 for (var j = 0; j < mx.length; j++) {
709 $D[mx[j].toUpperCase()] = $D[mx[j].toUpperCase().substring(0, 3)] = j; 709 $D[mx[j].toUpperCase()] = $D[mx[j].toUpperCase().substring(0, 3)] = j;
710 $D[mx[j]] = $D[mx[j].substring(0, 3)] = smf(j); 710 $D[mx[j]] = $D[mx[j].substring(0, 3)] = smf(j);
711 $P[mx[j]] = $P[mx[j].substring(0, 3)] = mf(j); 711 $P[mx[j]] = $P[mx[j].substring(0, 3)] = mf(j);
712 } 712 }
713 var ef = function (j) { 713 var ef = function (j) {
714 return function () { 714 return function () {
715 if (this._isSecond) { 715 if (this._isSecond) {
716 this._isSecond = false; 716 this._isSecond = false;
717 return this; 717 return this;
718 } 718 }
719 if (this._same) { 719 if (this._same) {
720 this._same = this._is = false; 720 this._same = this._is = false;
721 var o1 = this.toObject(), 721 var o1 = this.toObject(),
722 o2 = (arguments[0] || new Date()).toObject(), 722 o2 = (arguments[0] || new Date()).toObject(),
723 v = "", 723 v = "",
724 k = j.toLowerCase(); 724 k = j.toLowerCase();
725 for (var m = (px.length - 1); m > -1; m--) { 725 for (var m = (px.length - 1); m > -1; m--) {
726 v = px[m].toLowerCase(); 726 v = px[m].toLowerCase();
727 if (o1[v] != o2[v]) { 727 if (o1[v] != o2[v]) {
728 return false; 728 return false;
729 } 729 }
730 if (k == v) { 730 if (k == v) {
731 break; 731 break;
732 } 732 }
733 } 733 }
734 return true; 734 return true;
735 } 735 }
736 if (j.substring(j.length - 1) != "s") { 736 if (j.substring(j.length - 1) != "s") {
737 j += "s"; 737 j += "s";
738 } 738 }
739 return this["add" + j](this._orient); 739 return this["add" + j](this._orient);
740 }; 740 };
741 }; 741 };
742 var nf = function (n) { 742 var nf = function (n) {
743 return function () { 743 return function () {
744 this._dateElement = n; 744 this._dateElement = n;
745 return this; 745 return this;
746 }; 746 };
747 }; 747 };
748 for (var k = 0; k < px.length; k++) { 748 for (var k = 0; k < px.length; k++) {
749 de = px[k].toLowerCase(); 749 de = px[k].toLowerCase();
750 $P[de] = $P[de + "s"] = ef(px[k]); 750 $P[de] = $P[de + "s"] = ef(px[k]);
751 $N[de] = $N[de + "s"] = nf(de); 751 $N[de] = $N[de + "s"] = nf(de);
752 } 752 }
753 $P._ss = ef("Second"); 753 $P._ss = ef("Second");
754 var nthfn = function (n) { 754 var nthfn = function (n) {
755 return function (dayOfWeek) { 755 return function (dayOfWeek) {
756 if (this._same) { 756 if (this._same) {
757 return this._ss(arguments[0]); 757 return this._ss(arguments[0]);
758 } 758 }
759 if (dayOfWeek || dayOfWeek === 0) { 759 if (dayOfWeek || dayOfWeek === 0) {
760 return this.moveToNthOccurrence(dayOfWeek, n); 760 return this.moveToNthOccurrence(dayOfWeek, n);
761 } 761 }
762 this._nth = n; 762 this._nth = n;
763 if (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) { 763 if (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {
764 this._isSecond = true; 764 this._isSecond = true;
765 return this.addSeconds(this._orient); 765 return this.addSeconds(this._orient);
766 } 766 }
767 return this; 767 return this;
768 }; 768 };
769 }; 769 };
770 for (var l = 0; l < nth.length; l++) { 770 for (var l = 0; l < nth.length; l++) {
771 $P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l); 771 $P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);
772 } 772 }
773 }()); 773 }());
774 (function () { 774 (function () {
775 Date.Parsing = { 775 Date.Parsing = {
776 Exception: function (s) { 776 Exception: function (s) {
777 this.message = "Parse error at '" + s.substring(0, 10) + " ...'"; 777 this.message = "Parse error at '" + s.substring(0, 10) + " ...'";
778 } 778 }
779 }; 779 };
780 var $P = Date.Parsing; 780 var $P = Date.Parsing;
781 var _ = $P.Operators = { 781 var _ = $P.Operators = {
782 rtoken: function (r) { 782 rtoken: function (r) {
783 return function (s) { 783 return function (s) {
784 var mx = s.match(r); 784 var mx = s.match(r);
785 if (mx) { 785 if (mx) {
786 return ([mx[0], s.substring(mx[0].length)]); 786 return ([mx[0], s.substring(mx[0].length)]);
787 } else { 787 } else {
788 throw new $P.Exception(s); 788 throw new $P.Exception(s);
789 } 789 }
790 }; 790 };
791 }, 791 },
792 token: function (s) { 792 token: function (s) {
793 return function (s) { 793 return function (s) {
794 return _.rtoken(new RegExp("^\s*" + s + "\s*"))(s); 794 return _.rtoken(new RegExp("^\s*" + s + "\s*"))(s);
795 }; 795 };
796 }, 796 },
797 stoken: function (s) { 797 stoken: function (s) {
798 return _.rtoken(new RegExp("^" + s)); 798 return _.rtoken(new RegExp("^" + s));
799 }, 799 },
800 until: function (p) { 800 until: function (p) {
801 return function (s) { 801 return function (s) {
802 var qx = [], 802 var qx = [],
803 rx = null; 803 rx = null;
804 while (s.length) { 804 while (s.length) {
805 try { 805 try {
806 rx = p.call(this, s); 806 rx = p.call(this, s);
807 } catch (e) { 807 } catch (e) {
808 qx.push(rx[0]); 808 qx.push(rx[0]);
809 s = rx[1]; 809 s = rx[1];
810 continue; 810 continue;
811 } 811 }
812 break; 812 break;
813 } 813 }
814 return [qx, s]; 814 return [qx, s];
815 }; 815 };
816 }, 816 },
817 many: function (p) { 817 many: function (p) {
818 return function (s) { 818 return function (s) {
819 var rx = [], 819 var rx = [],
820 r = null; 820 r = null;
821 while (s.length) { 821 while (s.length) {
822 try { 822 try {
823 r = p.call(this, s); 823 r = p.call(this, s);
824 } catch (e) { 824 } catch (e) {
825 return [rx, s]; 825 return [rx, s];
826 } 826 }
827 rx.push(r[0]); 827 rx.push(r[0]);
828 s = r[1]; 828 s = r[1];
829 } 829 }
830 return [rx, s]; 830 return [rx, s];
831 }; 831 };
832 }, 832 },
833 optional: function (p) { 833 optional: function (p) {
834 return function (s) { 834 return function (s) {
835 var r = null; 835 var r = null;
836 try { 836 try {
837 r = p.call(this, s); 837 r = p.call(this, s);
838 } catch (e) { 838 } catch (e) {
839 return [null, s]; 839 return [null, s];
840 } 840 }
841 return [r[0], r[1]]; 841 return [r[0], r[1]];
842 }; 842 };
843 }, 843 },
844 not: function (p) { 844 not: function (p) {
845 return function (s) { 845 return function (s) {
846 try { 846 try {
847 p.call(this, s); 847 p.call(this, s);
848 } catch (e) { 848 } catch (e) {
849 return [null, s]; 849 return [null, s];
850 } 850 }
851 throw new $P.Exception(s); 851 throw new $P.Exception(s);
852 }; 852 };
853 }, 853 },
854 ignore: function (p) { 854 ignore: function (p) {
855 return p ? function (s) { 855 return p ? function (s) {
856 var r = null; 856 var r = null;
857 r = p.call(this, s); 857 r = p.call(this, s);
858 return [null, r[1]]; 858 return [null, r[1]];
859 } : null; 859 } : null;
860 }, 860 },
861 product: function () { 861 product: function () {
862 var px = arguments[0], 862 var px = arguments[0],
863 qx = Array.prototype.slice.call(arguments, 1), 863 qx = Array.prototype.slice.call(arguments, 1),
864 rx = []; 864 rx = [];
865 for (var i = 0; i < px.length; i++) { 865 for (var i = 0; i < px.length; i++) {
866 rx.push(_.each(px[i], qx)); 866 rx.push(_.each(px[i], qx));
867 } 867 }
868 return rx; 868 return rx;
869 }, 869 },
870 cache: function (rule) { 870 cache: function (rule) {
871 var cache = {}, 871 var cache = {},
872 r = null; 872 r = null;
873 return function (s) { 873 return function (s) {
874 try { 874 try {
875 r = cache[s] = (cache[s] || rule.call(this, s)); 875 r = cache[s] = (cache[s] || rule.call(this, s));
876 } catch (e) { 876 } catch (e) {
877 r = cache[s] = e; 877 r = cache[s] = e;
878 } 878 }
879 if (r instanceof $P.Exception) { 879 if (r instanceof $P.Exception) {
880 throw r; 880 throw r;
881 } else { 881 } else {
882 return r; 882 return r;
883 } 883 }
884 }; 884 };
885 }, 885 },
886 any: function () { 886 any: function () {
887 var px = arguments; 887 var px = arguments;
888 return function (s) { 888 return function (s) {
889 var r = null; 889 var r = null;
890 for (var i = 0; i < px.length; i++) { 890 for (var i = 0; i < px.length; i++) {
891 if (px[i] == null) { 891 if (px[i] == null) {
892 continue; 892 continue;
893 } 893 }
894 try { 894 try {
895 r = (px[i].call(this, s)); 895 r = (px[i].call(this, s));
896 } catch (e) { 896 } catch (e) {
897 r = null; 897 r = null;
898 } 898 }
899 if (r) { 899 if (r) {
900 return r; 900 return r;
901 } 901 }
902 } 902 }
903 throw new $P.Exception(s); 903 throw new $P.Exception(s);
904 }; 904 };
905 }, 905 },
906 each: function () { 906 each: function () {
907 var px = arguments; 907 var px = arguments;
908 return function (s) { 908 return function (s) {
909 var rx = [], 909 var rx = [],
910 r = null; 910 r = null;
911 for (var i = 0; i < px.length; i++) { 911 for (var i = 0; i < px.length; i++) {
912 if (px[i] == null) { 912 if (px[i] == null) {
913 continue; 913 continue;
914 } 914 }
915 try { 915 try {
916 r = (px[i].call(this, s)); 916 r = (px[i].call(this, s));
917 } catch (e) { 917 } catch (e) {
918 throw new $P.Exception(s); 918 throw new $P.Exception(s);
919 } 919 }
920 rx.push(r[0]); 920 rx.push(r[0]);
921 s = r[1]; 921 s = r[1];
922 } 922 }
923 return [rx, s]; 923 return [rx, s];
924 }; 924 };
925 }, 925 },
926 all: function () { 926 all: function () {
927 var px = arguments, 927 var px = arguments,
928 _ = _; 928 _ = _;
929 return _.each(_.optional(px)); 929 return _.each(_.optional(px));
930 }, 930 },
931 sequence: function (px, d, c) { 931 sequence: function (px, d, c) {
932 d = d || _.rtoken(/^\s*/); 932 d = d || _.rtoken(/^\s*/);
933 c = c || null; 933 c = c || null;
934 if (px.length == 1) { 934 if (px.length == 1) {
935 return px[0]; 935 return px[0];
936 } 936 }
937 return function (s) { 937 return function (s) {
938 var r = null, 938 var r = null,
939 q = null; 939 q = null;
940 var rx = []; 940 var rx = [];
941 for (var i = 0; i < px.length; i++) { 941 for (var i = 0; i < px.length; i++) {
942 try { 942 try {
943 r = px[i].call(this, s); 943 r = px[i].call(this, s);
944 } catch (e) { 944 } catch (e) {
945 break; 945 break;
946 } 946 }
947 rx.push(r[0]); 947 rx.push(r[0]);
948 try { 948 try {
949 q = d.call(this, r[1]); 949 q = d.call(this, r[1]);
950 } catch (ex) { 950 } catch (ex) {
951 q = null; 951 q = null;
952 break; 952 break;
953 } 953 }
954 s = q[1]; 954 s = q[1];
955 } 955 }
956 if (!r) { 956 if (!r) {
957 throw new $P.Exception(s); 957 throw new $P.Exception(s);
958 } 958 }
959 if (q) { 959 if (q) {
960 throw new $P.Exception(q[1]); 960 throw new $P.Exception(q[1]);
961 } 961 }
962 if (c) { 962 if (c) {
963 try { 963 try {
964 r = c.call(this, r[1]); 964 r = c.call(this, r[1]);
965 } catch (ey) { 965 } catch (ey) {
966 throw new $P.Exception(r[1]); 966 throw new $P.Exception(r[1]);
967 } 967 }
968 } 968 }
969 return [rx, (r ? r[1] : s)]; 969 return [rx, (r ? r[1] : s)];
970 }; 970 };
971 }, 971 },
972 between: function (d1, p, d2) { 972 between: function (d1, p, d2) {
973 d2 = d2 || d1; 973 d2 = d2 || d1;
974 var _fn = _.each(_.ignore(d1), p, _.ignore(d2)); 974 var _fn = _.each(_.ignore(d1), p, _.ignore(d2));
975 return function (s) { 975 return function (s) {
976 var rx = _fn.call(this, s); 976 var rx = _fn.call(this, s);
977 return [ 977 return [
978 [rx[0][0], r[0][2]], rx[1] 978 [rx[0][0], r[0][2]], rx[1]
979 ]; 979 ];
980 }; 980 };
981 }, 981 },
982 list: function (p, d, c) { 982 list: function (p, d, c) {
983 d = d || _.rtoken(/^\s*/); 983 d = d || _.rtoken(/^\s*/);
984 c = c || null; 984 c = c || null;
985 return (p instanceof Array ? _.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) : _.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c))); 985 return (p instanceof Array ? _.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) : _.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));
986 }, 986 },
987 set: function (px, d, c) { 987 set: function (px, d, c) {
988 d = d || _.rtoken(/^\s*/); 988 d = d || _.rtoken(/^\s*/);
989 c = c || null; 989 c = c || null;
990 return function (s) { 990 return function (s) {
991 var r = null, 991 var r = null,
992 p = null, 992 p = null,
993 q = null, 993 q = null,
994 rx = null, 994 rx = null,
995 best = [ 995 best = [
996 [], s 996 [], s
997 ], 997 ],
998 last = false; 998 last = false;
999 for (var i = 0; i < px.length; i++) { 999 for (var i = 0; i < px.length; i++) {
1000 q = null; 1000 q = null;
1001 p = null; 1001 p = null;
1002 r = null; 1002 r = null;
1003 last = (px.length == 1); 1003 last = (px.length == 1);
1004 try { 1004 try {
1005 r = px[i].call(this, s); 1005 r = px[i].call(this, s);
1006 } catch (e) { 1006 } catch (e) {
1007 continue; 1007 continue;
1008 } 1008 }
1009 rx = [ 1009 rx = [
1010 [r[0]], r[1] 1010 [r[0]], r[1]
1011 ]; 1011 ];
1012 if (r[1].length > 0 && !last) { 1012 if (r[1].length > 0 && !last) {
1013 try { 1013 try {
1014 q = d.call(this, r[1]); 1014 q = d.call(this, r[1]);
1015 } catch (ex) { 1015 } catch (ex) {
1016 last = true; 1016 last = true;
1017 } 1017 }
1018 } else { 1018 } else {
1019 last = true; 1019 last = true;
1020 } 1020 }
1021 if (!last && q[1].length === 0) { 1021 if (!last && q[1].length === 0) {
1022 last = true; 1022 last = true;
1023 } 1023 }
1024 if (!last) { 1024 if (!last) {
1025 var qx = []; 1025 var qx = [];
1026 for (var j = 0; j < px.length; j++) { 1026 for (var j = 0; j < px.length; j++) {
1027 if (i != j) { 1027 if (i != j) {
1028 qx.push(px[j]); 1028 qx.push(px[j]);
1029 } 1029 }
1030 } 1030 }
1031 p = _.set(qx, d).call(this, q[1]); 1031 p = _.set(qx, d).call(this, q[1]);
1032 if (p[0].length > 0) { 1032 if (p[0].length > 0) {
1033 rx[0] = rx[0].concat(p[0]); 1033 rx[0] = rx[0].concat(p[0]);
1034 rx[1] = p[1]; 1034 rx[1] = p[1];
1035 } 1035 }
1036 } 1036 }
1037 if (rx[1].length < best[1].length) { 1037 if (rx[1].length < best[1].length) {
1038 best = rx; 1038 best = rx;
1039 } 1039 }
1040 if (best[1].length === 0) { 1040 if (best[1].length === 0) {
1041 break; 1041 break;
1042 } 1042 }
1043 } 1043 }
1044 if (best[0].length === 0) { 1044 if (best[0].length === 0) {
1045 return best; 1045 return best;
1046 } 1046 }
1047 if (c) { 1047 if (c) {
1048 try { 1048 try {
1049 q = c.call(this, best[1]); 1049 q = c.call(this, best[1]);
1050 } catch (ey) { 1050 } catch (ey) {
1051 throw new $P.Exception(best[1]); 1051 throw new $P.Exception(best[1]);
1052 } 1052 }
1053 best[1] = q[1]; 1053 best[1] = q[1];
1054 } 1054 }
1055 return best; 1055 return best;
1056 }; 1056 };
1057 }, 1057 },
1058 forward: function (gr, fname) { 1058 forward: function (gr, fname) {
1059 return function (s) { 1059 return function (s) {
1060 return gr[fname].call(this, s); 1060 return gr[fname].call(this, s);
1061 }; 1061 };
1062 }, 1062 },
1063 replace: function (rule, repl) { 1063 replace: function (rule, repl) {
1064 return function (s) { 1064 return function (s) {
1065 var r = rule.call(this, s); 1065 var r = rule.call(this, s);
1066 return [repl, r[1]]; 1066 return [repl, r[1]];
1067 }; 1067 };
1068 }, 1068 },
1069 process: function (rule, fn) { 1069 process: function (rule, fn) {
1070 return function (s) { 1070 return function (s) {
1071 var r = rule.call(this, s); 1071 var r = rule.call(this, s);
1072 return [fn.call(this, r[0]), r[1]]; 1072 return [fn.call(this, r[0]), r[1]];
1073 }; 1073 };
1074 }, 1074 },
1075 min: function (min, rule) { 1075 min: function (min, rule) {
1076 return function (s) { 1076 return function (s) {
1077 var rx = rule.call(this, s); 1077 var rx = rule.call(this, s);
1078 if (rx[0].length < min) { 1078 if (rx[0].length < min) {
1079 throw new $P.Exception(s); 1079 throw new $P.Exception(s);
1080 } 1080 }
1081 return rx; 1081 return rx;
1082 }; 1082 };
1083 } 1083 }
1084 }; 1084 };
1085 var _generator = function (op) { 1085 var _generator = function (op) {
1086 return function () { 1086 return function () {
1087 var args = null, 1087 var args = null,
1088 rx = []; 1088 rx = [];
1089 if (arguments.length > 1) { 1089 if (arguments.length > 1) {
1090 args = Array.prototype.slice.call(arguments); 1090 args = Array.prototype.slice.call(arguments);
1091 } else if (arguments[0] instanceof Array) { 1091 } else if (arguments[0] instanceof Array) {
1092 args = arguments[0]; 1092 args = arguments[0];
1093 } 1093 }
1094 if (args) { 1094 if (args) {
1095 for (var i = 0, px = args.shift(); i < px.length; i++) { 1095 for (var i = 0, px = args.shift(); i < px.length; i++) {
1096 args.unshift(px[i]); 1096 args.unshift(px[i]);
1097 rx.push(op.apply(null, args)); 1097 rx.push(op.apply(null, args));
1098 args.shift(); 1098 args.shift();
1099 return rx; 1099 return rx;
1100 } 1100 }
1101 } else { 1101 } else {
1102 return op.apply(null, arguments); 1102 return op.apply(null, arguments);
1103 } 1103 }
1104 }; 1104 };
1105 }; 1105 };
1106 var gx = "optional not ignore cache".split(/\s/); 1106 var gx = "optional not ignore cache".split(/\s/);
1107 for (var i = 0; i < gx.length; i++) { 1107 for (var i = 0; i < gx.length; i++) {
1108 _[gx[i]] = _generator(_[gx[i]]); 1108 _[gx[i]] = _generator(_[gx[i]]);
1109 } 1109 }
1110 var _vector = function (op) { 1110 var _vector = function (op) {
1111 return function () { 1111 return function () {
1112 if (arguments[0] instanceof Array) { 1112 if (arguments[0] instanceof Array) {
1113 return op.apply(null, arguments[0]); 1113 return op.apply(null, arguments[0]);
1114 } else { 1114 } else {
1115 return op.apply(null, arguments); 1115 return op.apply(null, arguments);
1116 } 1116 }
1117 }; 1117 };
1118 }; 1118 };
1119 var vx = "each any all".split(/\s/); 1119 var vx = "each any all".split(/\s/);
1120 for (var j = 0; j < vx.length; j++) { 1120 for (var j = 0; j < vx.length; j++) {
1121 _[vx[j]] = _vector(_[vx[j]]); 1121 _[vx[j]] = _vector(_[vx[j]]);
1122 } 1122 }
1123 }()); 1123 }());
1124 (function () { 1124 (function () {
1125 var $D = Date, 1125 var $D = Date,
1126 $P = $D.prototype, 1126 $P = $D.prototype,
1127 $C = $D.CultureInfo; 1127 $C = $D.CultureInfo;
1128 var flattenAndCompact = function (ax) { 1128 var flattenAndCompact = function (ax) {
1129 var rx = []; 1129 var rx = [];
1130 for (var i = 0; i < ax.length; i++) { 1130 for (var i = 0; i < ax.length; i++) {
1131 if (ax[i] instanceof Array) { 1131 if (ax[i] instanceof Array) {
1132 rx = rx.concat(flattenAndCompact(ax[i])); 1132 rx = rx.concat(flattenAndCompact(ax[i]));
1133 } else { 1133 } else {
1134 if (ax[i]) { 1134 if (ax[i]) {
1135 rx.push(ax[i]); 1135 rx.push(ax[i]);
1136 } 1136 }
1137 } 1137 }
1138 } 1138 }
1139 return rx; 1139 return rx;
1140 }; 1140 };
1141 $D.Grammar = {}; 1141 $D.Grammar = {};
1142 $D.Translator = { 1142 $D.Translator = {
1143 hour: function (s) { 1143 hour: function (s) {
1144 return function () { 1144 return function () {
1145 this.hour = Number(s); 1145 this.hour = Number(s);
1146 }; 1146 };
1147 }, 1147 },
1148 minute: function (s) { 1148 minute: function (s) {
1149 return function () { 1149 return function () {
1150 this.minute = Number(s); 1150 this.minute = Number(s);
1151 }; 1151 };
1152 }, 1152 },
1153 second: function (s) { 1153 second: function (s) {
1154 return function () { 1154 return function () {
1155 this.second = Number(s); 1155 this.second = Number(s);
1156 }; 1156 };
1157 }, 1157 },
1158 meridian: function (s) { 1158 meridian: function (s) {
1159 return function () { 1159 return function () {
1160 this.meridian = s.slice(0, 1).toLowerCase(); 1160 this.meridian = s.slice(0, 1).toLowerCase();
1161 }; 1161 };
1162 }, 1162 },
1163 timezone: function (s) { 1163 timezone: function (s) {
1164 return function () { 1164 return function () {
1165 var n = s.replace(/[^\d\+\-]/g, ""); 1165 var n = s.replace(/[^\d\+\-]/g, "");
1166 if (n.length) { 1166 if (n.length) {
1167 this.timezoneOffset = Number(n); 1167 this.timezoneOffset = Number(n);
1168 } else { 1168 } else {
1169 this.timezone = s.toLowerCase(); 1169 this.timezone = s.toLowerCase();
1170 } 1170 }
1171 }; 1171 };
1172 }, 1172 },
1173 day: function (x) { 1173 day: function (x) {
1174 var s = x[0]; 1174 var s = x[0];
1175 return function () { 1175 return function () {
1176 this.day = Number(s.match(/\d+/)[0]); 1176 this.day = Number(s.match(/\d+/)[0]);
1177 }; 1177 };
1178 }, 1178 },
1179 month: function (s) { 1179 month: function (s) {
1180 return function () { 1180 return function () {
1181 this.month = (s.length == 3) ? "jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s) / 4 : Number(s) - 1; 1181 this.month = (s.length == 3) ? "jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s) / 4 : Number(s) - 1;
1182 }; 1182 };
1183 }, 1183 },
1184 year: function (s) { 1184 year: function (s) {
1185 return function () { 1185 return function () {
1186 var n = Number(s); 1186 var n = Number(s);
1187 this.year = ((s.length > 2) ? n : (n + (((n + 2000) < $C.twoDigitYearMax) ? 2000 : 1900))); 1187 this.year = ((s.length > 2) ? n : (n + (((n + 2000) < $C.twoDigitYearMax) ? 2000 : 1900)));
1188 }; 1188 };
1189 }, 1189 },
1190 rday: function (s) { 1190 rday: function (s) {
1191 return function () { 1191 return function () {
1192 switch (s) { 1192 switch (s) {
1193 case "yesterday": 1193 case "yesterday":
1194 this.days = -1; 1194 this.days = -1;
1195 break; 1195 break;
1196 case "tomorrow": 1196 case "tomorrow":
1197 this.days = 1; 1197 this.days = 1;
1198 break; 1198 break;
1199 case "today": 1199 case "today":
1200 this.days = 0; 1200 this.days = 0;
1201 break; 1201 break;
1202 case "now": 1202 case "now":
1203 this.days = 0; 1203 this.days = 0;
1204 this.now = true; 1204 this.now = true;
1205 break; 1205 break;
1206 } 1206 }
1207 }; 1207 };
1208 }, 1208 },
1209 finishExact: function (x) { 1209 finishExact: function (x) {
1210 x = (x instanceof Array) ? x : [x]; 1210 x = (x instanceof Array) ? x : [x];
1211 for (var i = 0; i < x.length; i++) { 1211 for (var i = 0; i < x.length; i++) {
1212 if (x[i]) { 1212 if (x[i]) {
1213 x[i].call(this); 1213 x[i].call(this);
1214 } 1214 }
1215 } 1215 }
1216 var now = new Date(); 1216 var now = new Date();
1217 if ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) { 1217 if ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {
1218 this.day = now.getDate(); 1218 this.day = now.getDate();
1219 } 1219 }
1220 if (!this.year) { 1220 if (!this.year) {
1221 this.year = now.getFullYear(); 1221 this.year = now.getFullYear();
1222 } 1222 }
1223 if (!this.month && this.month !== 0) { 1223 if (!this.month && this.month !== 0) {
1224 this.month = now.getMonth(); 1224 this.month = now.getMonth();
1225 } 1225 }
1226 if (!this.day) { 1226 if (!this.day) {
1227 this.day = 1; 1227 this.day = 1;
1228 } 1228 }
1229 if (!this.hour) { 1229 if (!this.hour) {
1230 this.hour = 0; 1230 this.hour = 0;
1231 } 1231 }
1232 if (!this.minute) { 1232 if (!this.minute) {
1233 this.minute = 0; 1233 this.minute = 0;
1234 } 1234 }
1235 if (!this.second) { 1235 if (!this.second) {
1236 this.second = 0; 1236 this.second = 0;
1237 } 1237 }
1238 if (this.meridian && this.hour) { 1238 if (this.meridian && this.hour) {
1239 if (this.meridian == "p" && this.hour < 12) { 1239 if (this.meridian == "p" && this.hour < 12) {
1240 this.hour = this.hour + 12; 1240 this.hour = this.hour + 12;
1241 } else if (this.meridian == "a" && this.hour == 12) { 1241 } else if (this.meridian == "a" && this.hour == 12) {
1242 this.hour = 0; 1242 this.hour = 0;
1243 } 1243 }
1244 } 1244 }
1245 if (this.day > $D.getDaysInMonth(this.year, this.month)) { 1245 if (this.day > $D.getDaysInMonth(this.year, this.month)) {
1246 throw new RangeError(this.day + " is not a valid value for days."); 1246 throw new RangeError(this.day + " is not a valid value for days.");
1247 } 1247 }
1248 var r = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second); 1248 var r = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second);
1249 if (this.timezone) { 1249 if (this.timezone) {
1250 r.set({ 1250 r.set({
1251 timezone: this.timezone 1251 timezone: this.timezone
1252 }); 1252 });
1253 } else if (this.timezoneOffset) { 1253 } else if (this.timezoneOffset) {
1254 r.set({ 1254 r.set({
1255 timezoneOffset: this.timezoneOffset 1255 timezoneOffset: this.timezoneOffset
1256 }); 1256 });
1257 } 1257 }
1258 return r; 1258 return r;
1259 }, 1259 },
1260 finish: function (x) { 1260 finish: function (x) {
1261 x = (x instanceof Array) ? flattenAndCompact(x) : [x]; 1261 x = (x instanceof Array) ? flattenAndCompact(x) : [x];
1262 if (x.length === 0) { 1262 if (x.length === 0) {
1263 return null; 1263 return null;
1264 } 1264 }
1265 for (var i = 0; i < x.length; i++) { 1265 for (var i = 0; i < x.length; i++) {
1266 if (typeof x[i] == "function") { 1266 if (typeof x[i] == "function") {
1267 x[i].call(this); 1267 x[i].call(this);
1268 } 1268 }
1269 } 1269 }
1270 var today = $D.today(); 1270 var today = $D.today();
1271 if (this.now && !this.unit && !this.operator) { 1271 if (this.now && !this.unit && !this.operator) {
1272 return new Date(); 1272 return new Date();
1273 } else if (this.now) { 1273 } else if (this.now) {
1274 today = new Date(); 1274 today = new Date();
1275 } 1275 }
1276 var expression = !!(this.days && this.days !== null || this.orient || this.operator); 1276 var expression = !!(this.days && this.days !== null || this.orient || this.operator);
1277 var gap, mod, orient; 1277 var gap, mod, orient;
1278 orient = ((this.orient == "past" || this.operator == "subtract") ? -1 : 1); 1278 orient = ((this.orient == "past" || this.operator == "subtract") ? -1 : 1);
1279 if (!this.now && "hour minute second".indexOf(this.unit) != -1) { 1279 if (!this.now && "hour minute second".indexOf(this.unit) != -1) {
1280 today.setTimeToNow(); 1280 today.setTimeToNow();
1281 } 1281 }
1282 if (this.month || this.month === 0) { 1282 if (this.month || this.month === 0) {
1283 if ("year day hour minute second".indexOf(this.unit) != -1) { 1283 if ("year day hour minute second".indexOf(this.unit) != -1) {
1284 this.value = this.month + 1; 1284 this.value = this.month + 1;
1285 this.month = null; 1285 this.month = null;
1286 expression = true; 1286 expression = true;
1287 } 1287 }
1288 } 1288 }
1289 if (!expression && this.weekday && !this.day && !this.days) { 1289 if (!expression && this.weekday && !this.day && !this.days) {
1290 var temp = Date[this.weekday](); 1290 var temp = Date[this.weekday]();
1291 this.day = temp.getDate(); 1291 this.day = temp.getDate();
1292 if (!this.month) { 1292 if (!this.month) {
1293 this.month = temp.getMonth(); 1293 this.month = temp.getMonth();
1294 } 1294 }
1295 this.year = temp.getFullYear(); 1295 this.year = temp.getFullYear();
1296 } 1296 }
1297 if (expression && this.weekday && this.unit != "month") { 1297 if (expression && this.weekday && this.unit != "month") {
1298 this.unit = "day"; 1298 this.unit = "day";
1299 gap = ($D.getDayNumberFromName(this.weekday) - today.getDay()); 1299 gap = ($D.getDayNumberFromName(this.weekday) - today.getDay());
1300 mod = 7; 1300 mod = 7;
1301 this.days = gap ? ((gap + (orient * mod)) % mod) : (orient * mod); 1301 this.days = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);
1302 } 1302 }
1303 if (this.month && this.unit == "day" && this.operator) { 1303 if (this.month && this.unit == "day" && this.operator) {
1304 this.value = (this.month + 1); 1304 this.value = (this.month + 1);
1305 this.month = null; 1305 this.month = null;
1306 } 1306 }
1307 if (this.value != null && this.month != null && this.year != null) { 1307 if (this.value != null && this.month != null && this.year != null) {
1308 this.day = this.value * 1; 1308 this.day = this.value * 1;
1309 } 1309 }
1310 if (this.month && !this.day && this.value) { 1310 if (this.month && !this.day && this.value) {
1311 today.set({ 1311 today.set({
1312 day: this.value * 1 1312 day: this.value * 1
1313 }); 1313 });
1314 if (!expression) { 1314 if (!expression) {
1315 this.day = this.value * 1; 1315 this.day = this.value * 1;
1316 } 1316 }
1317 } 1317 }
1318 if (!this.month && this.value && this.unit == "month" && !this.now) { 1318 if (!this.month && this.value && this.unit == "month" && !this.now) {
1319 this.month = this.value; 1319 this.month = this.value;
1320 expression = true; 1320 expression = true;
1321 } 1321 }
1322 if (expression && (this.month || this.month === 0) && this.unit != "year") { 1322 if (expression && (this.month || this.month === 0) && this.unit != "year") {
1323 this.unit = "month"; 1323 this.unit = "month";
1324 gap = (this.month - today.getMonth()); 1324 gap = (this.month - today.getMonth());
1325 mod = 12; 1325 mod = 12;
1326 this.months = gap ? ((gap + (orient * mod)) % mod) : (orient * mod); 1326 this.months = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);
1327 this.month = null; 1327 this.month = null;
1328 } 1328 }
1329 if (!this.unit) { 1329 if (!this.unit) {
1330 this.unit = "day"; 1330 this.unit = "day";
1331 } 1331 }
1332 if (!this.value && this.operator && this.operator !== null && this[this.unit + "s"] && this[this.unit + "s"] !== null) { 1332 if (!this.value && this.operator && this.operator !== null && this[this.unit + "s"] && this[this.unit + "s"] !== null) {
1333 this[this.unit + "s"] = this[this.unit + "s"] + ((this.operator == "add") ? 1 : -1) + (this.value || 0) * orient; 1333 this[this.unit + "s"] = this[this.unit + "s"] + ((this.operator == "add") ? 1 : -1) + (this.value || 0) * orient;
1334 } else if (this[this.unit + "s"] == null || this.operator != null) { 1334 } else if (this[this.unit + "s"] == null || this.operator != null) {
1335 if (!this.value) { 1335 if (!this.value) {
1336 this.value = 1; 1336 this.value = 1;
1337 } 1337 }
1338 this[this.unit + "s"] = this.value * orient; 1338 this[this.unit + "s"] = this.value * orient;
1339 } 1339 }
1340 if (this.meridian && this.hour) { 1340 if (this.meridian && this.hour) {
1341 if (this.meridian == "p" && this.hour < 12) { 1341 if (this.meridian == "p" && this.hour < 12) {
1342 this.hour = this.hour + 12; 1342 this.hour = this.hour + 12;
1343 } else if (this.meridian == "a" && this.hour == 12) { 1343 } else if (this.meridian == "a" && this.hour == 12) {
1344 this.hour = 0; 1344 this.hour = 0;
1345 } 1345 }
1346 } 1346 }
1347 if (this.weekday && !this.day && !this.days) { 1347 if (this.weekday && !this.day && !this.days) {
1348 var temp = Date[this.weekday](); 1348 var temp = Date[this.weekday]();
1349 this.day = temp.getDate(); 1349 this.day = temp.getDate();
1350 if (temp.getMonth() !== today.getMonth()) { 1350 if (temp.getMonth() !== today.getMonth()) {
1351 this.month = temp.getMonth(); 1351 this.month = temp.getMonth();
1352 } 1352 }
1353 } 1353 }
1354 if ((this.month || this.month === 0) && !this.day) { 1354 if ((this.month || this.month === 0) && !this.day) {
1355 this.day = 1; 1355 this.day = 1;
1356 } 1356 }
1357 if (!this.orient && !this.operator && this.unit == "week" && this.value && !this.day && !this.month) { 1357 if (!this.orient && !this.operator && this.unit == "week" && this.value && !this.day && !this.month) {
1358 return Date.today().setWeek(this.value); 1358 return Date.today().setWeek(this.value);
1359 } 1359 }
1360 if (expression && this.timezone && this.day && this.days) { 1360 if (expression && this.timezone && this.day && this.days) {
1361 this.day = this.days; 1361 this.day = this.days;
1362 } 1362 }
1363 return (expression) ? today.add(this) : today.set(this); 1363 return (expression) ? today.add(this) : today.set(this);
1364 } 1364 }
1365 }; 1365 };
1366 var _ = $D.Parsing.Operators, 1366 var _ = $D.Parsing.Operators,
1367 g = $D.Grammar, 1367 g = $D.Grammar,
1368 t = $D.Translator, 1368 t = $D.Translator,
1369 _fn; 1369 _fn;
1370 g.datePartDelimiter = _.rtoken(/^([\s\-\.\,\/\x27]+)/); 1370 g.datePartDelimiter = _.rtoken(/^([\s\-\.\,\/\x27]+)/);
1371 g.timePartDelimiter = _.stoken(":"); 1371 g.timePartDelimiter = _.stoken(":");
1372 g.whiteSpace = _.rtoken(/^\s*/); 1372 g.whiteSpace = _.rtoken(/^\s*/);
1373 g.generalDelimiter = _.rtoken(/^(([\s\,]|at|@|on)+)/); 1373 g.generalDelimiter = _.rtoken(/^(([\s\,]|at|@|on)+)/);
1374 var _C = {}; 1374 var _C = {};
1375 g.ctoken = function (keys) { 1375 g.ctoken = function (keys) {
1376 var fn = _C[keys]; 1376 var fn = _C[keys];
1377 if (!fn) { 1377 if (!fn) {
1378 var c = $C.regexPatterns; 1378 var c = $C.regexPatterns;
1379 var kx = keys.split(/\s+/), 1379 var kx = keys.split(/\s+/),
1380 px = []; 1380 px = [];
1381 for (var i = 0; i < kx.length; i++) { 1381 for (var i = 0; i < kx.length; i++) {
1382 px.push(_.replace(_.rtoken(c[kx[i]]), kx[i])); 1382 px.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));
1383 } 1383 }
1384 fn = _C[keys] = _.any.apply(null, px); 1384 fn = _C[keys] = _.any.apply(null, px);
1385 } 1385 }
1386 return fn; 1386 return fn;
1387 }; 1387 };
1388 g.ctoken2 = function (key) { 1388 g.ctoken2 = function (key) {
1389 return _.rtoken($C.regexPatterns[key]); 1389 return _.rtoken($C.regexPatterns[key]);
1390 }; 1390 };
1391 g.h = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), t.hour)); 1391 g.h = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), t.hour));
1392 g.hh = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/), t.hour)); 1392 g.hh = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/), t.hour));
1393 g.H = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), t.hour)); 1393 g.H = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), t.hour));
1394 g.HH = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/), t.hour)); 1394 g.HH = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/), t.hour));
1395 g.m = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.minute)); 1395 g.m = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.minute));
1396 g.mm = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.minute)); 1396 g.mm = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.minute));
1397 g.s = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.second)); 1397 g.s = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.second));
1398 g.ss = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.second)); 1398 g.ss = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.second));
1399 g.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter)); 1399 g.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));
1400 g.t = _.cache(_.process(g.ctoken2("shortMeridian"), t.meridian)); 1400 g.t = _.cache(_.process(g.ctoken2("shortMeridian"), t.meridian));
1401 g.tt = _.cache(_.process(g.ctoken2("longMeridian"), t.meridian)); 1401 g.tt = _.cache(_.process(g.ctoken2("longMeridian"), t.meridian));
1402 g.z = _.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), t.timezone)); 1402 g.z = _.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), t.timezone));
1403 g.zz = _.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), t.timezone)); 1403 g.zz = _.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), t.timezone));
1404 g.zzz = _.cache(_.process(g.ctoken2("timezone"), t.timezone)); 1404 g.zzz = _.cache(_.process(g.ctoken2("timezone"), t.timezone));
1405 g.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([g.tt, g.zzz])); 1405 g.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([g.tt, g.zzz]));
1406 g.time = _.each(_.optional(_.ignore(_.stoken("T"))), g.hms, g.timeSuffix); 1406 g.time = _.each(_.optional(_.ignore(_.stoken("T"))), g.hms, g.timeSuffix);
1407 g.d = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/), _.optional(g.ctoken2("ordinalSuffix"))), t.day)); 1407 g.d = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/), _.optional(g.ctoken2("ordinalSuffix"))), t.day));
1408 g.dd = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/), _.optional(g.ctoken2("ordinalSuffix"))), t.day)); 1408 g.dd = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/), _.optional(g.ctoken2("ordinalSuffix"))), t.day));
1409 g.ddd = g.dddd = _.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"), function (s) { 1409 g.ddd = g.dddd = _.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"), function (s) {
1410 return function () { 1410 return function () {
1411 this.weekday = s; 1411 this.weekday = s;
1412 }; 1412 };
1413 })); 1413 }));
1414 g.M = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/), t.month)); 1414 g.M = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/), t.month));
1415 g.MM = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/), t.month)); 1415 g.MM = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/), t.month));
1416 g.MMM = g.MMMM = _.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"), t.month)); 1416 g.MMM = g.MMMM = _.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"), t.month));
1417 g.y = _.cache(_.process(_.rtoken(/^(\d\d?)/), t.year)); 1417 g.y = _.cache(_.process(_.rtoken(/^(\d\d?)/), t.year));
1418 g.yy = _.cache(_.process(_.rtoken(/^(\d\d)/), t.year)); 1418 g.yy = _.cache(_.process(_.rtoken(/^(\d\d)/), t.year));
1419 g.yyy = _.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/), t.year)); 1419 g.yyy = _.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/), t.year));
1420 g.yyyy = _.cache(_.process(_.rtoken(/^(\d\d\d\d)/), t.year)); 1420 g.yyyy = _.cache(_.process(_.rtoken(/^(\d\d\d\d)/), t.year));
1421 _fn = function () { 1421 _fn = function () {
1422 return _.each(_.any.apply(null, arguments), _.not(g.ctoken2("timeContext"))); 1422 return _.each(_.any.apply(null, arguments), _.not(g.ctoken2("timeContext")));
1423 }; 1423 };
1424 g.day = _fn(g.d, g.dd); 1424 g.day = _fn(g.d, g.dd);
1425 g.month = _fn(g.M, g.MMM); 1425 g.month = _fn(g.M, g.MMM);
1426 g.year = _fn(g.yyyy, g.yy); 1426 g.year = _fn(g.yyyy, g.yy);
1427 g.orientation = _.process(g.ctoken("past future"), function (s) { 1427 g.orientation = _.process(g.ctoken("past future"), function (s) {
1428 return function () { 1428 return function () {
1429 this.orient = s; 1429 this.orient = s;
1430 }; 1430 };
1431 }); 1431 });
1432 g.operator = _.process(g.ctoken("add subtract"), function (s) { 1432 g.operator = _.process(g.ctoken("add subtract"), function (s) {
1433 return function () { 1433 return function () {
1434 this.operator = s; 1434 this.operator = s;
1435 }; 1435 };
1436 }); 1436 });
1437 g.rday = _.process(g.ctoken("yesterday tomorrow today now"), t.rday); 1437 g.rday = _.process(g.ctoken("yesterday tomorrow today now"), t.rday);
1438 g.unit = _.process(g.ctoken("second minute hour day week month year"), function (s) { 1438 g.unit = _.process(g.ctoken("second minute hour day week month year"), function (s) {
1439 return function () { 1439 return function () {
1440 this.unit = s; 1440 this.unit = s;
1441 }; 1441 };
1442 }); 1442 });
1443 g.value = _.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/), function (s) { 1443 g.value = _.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/), function (s) {
1444 return function () { 1444 return function () {
1445 this.value = s.replace(/\D/g, ""); 1445 this.value = s.replace(/\D/g, "");
1446 }; 1446 };
1447 }); 1447 });
1448 g.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM]); 1448 g.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM]);
1449 _fn = function () { 1449 _fn = function () {
1450 return _.set(arguments, g.datePartDelimiter); 1450 return _.set(arguments, g.datePartDelimiter);
1451 }; 1451 };
1452 g.mdy = _fn(g.ddd, g.month, g.day, g.year); 1452 g.mdy = _fn(g.ddd, g.month, g.day, g.year);
1453 g.ymd = _fn(g.ddd, g.year, g.month, g.day); 1453 g.ymd = _fn(g.ddd, g.year, g.month, g.day);
1454 g.dmy = _fn(g.ddd, g.day, g.month, g.year); 1454 g.dmy = _fn(g.ddd, g.day, g.month, g.year);
1455 g.date = function (s) { 1455 g.date = function (s) {
1456 return ((g[$C.dateElementOrder] || g.mdy).call(this, s)); 1456 return ((g[$C.dateElementOrder] || g.mdy).call(this, s));
1457 }; 1457 };
1458 g.format = _.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/), function (fmt) { 1458 g.format = _.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/), function (fmt) {
1459 if (g[fmt]) { 1459 if (g[fmt]) {
1460 return g[fmt]; 1460 return g[fmt];
1461 } else { 1461 } else {
1462 throw $D.Parsing.Exception(fmt); 1462 throw $D.Parsing.Exception(fmt);
1463 } 1463 }
1464 }), _.process(_.rtoken(/^[^dMyhHmstz]+/), function (s) { 1464 }), _.process(_.rtoken(/^[^dMyhHmstz]+/), function (s) {
1465 return _.ignore(_.stoken(s)); 1465 return _.ignore(_.stoken(s));
1466 }))), function (rules) { 1466 }))), function (rules) {
1467 return _.process(_.each.apply(null, rules), t.finishExact); 1467 return _.process(_.each.apply(null, rules), t.finishExact);
1468 }); 1468 });
1469 var _F = {}; 1469 var _F = {};
1470 var _get = function (f) { 1470 var _get = function (f) {
1471 return _F[f] = (_F[f] || g.format(f)[0]); 1471 return _F[f] = (_F[f] || g.format(f)[0]);
1472 }; 1472 };
1473 g.formats = function (fx) { 1473 g.formats = function (fx) {
1474 if (fx instanceof Array) { 1474 if (fx instanceof Array) {
1475 var rx = []; 1475 var rx = [];
1476 for (var i = 0; i < fx.length; i++) { 1476 for (var i = 0; i < fx.length; i++) {
1477 rx.push(_get(fx[i])); 1477 rx.push(_get(fx[i]));
1478 } 1478 }
1479 return _.any.apply(null, rx); 1479 return _.any.apply(null, rx);
1480 } else { 1480 } else {
1481 return _get(fx); 1481 return _get(fx);
1482 } 1482 }
1483 }; 1483 };
1484 g._formats = g.formats(["\"yyyy-MM-ddTHH:mm:ssZ\"", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-ddTHH:mm:ssz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mmZ", "yyyy-MM-ddTHH:mmz", "yyyy-MM-ddTHH:mm", "ddd, MMM dd, yyyy H:mm:ss tt", "ddd MMM d yyyy HH:mm:ss zzz", "MMddyyyy", "ddMMyyyy", "Mddyyyy", "ddMyyyy", "Mdyyyy", "dMyyyy", "yyyy", "Mdyy", "dMyy", "d"]); 1484 g._formats = g.formats(["\"yyyy-MM-ddTHH:mm:ssZ\"", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-ddTHH:mm:ssz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mmZ", "yyyy-MM-ddTHH:mmz", "yyyy-MM-ddTHH:mm", "ddd, MMM dd, yyyy H:mm:ss tt", "ddd MMM d yyyy HH:mm:ss zzz", "MMddyyyy", "ddMMyyyy", "Mddyyyy", "ddMyyyy", "Mdyyyy", "dMyyyy", "yyyy", "Mdyy", "dMyy", "d"]);
1485 g._start = _.process(_.set([g.date, g.time, g.expression], g.generalDelimiter, g.whiteSpace), t.finish); 1485 g._start = _.process(_.set([g.date, g.time, g.expression], g.generalDelimiter, g.whiteSpace), t.finish);
1486 g.start = function (s) { 1486 g.start = function (s) {
1487 try { 1487 try {
1488 var r = g._formats.call({}, s); 1488 var r = g._formats.call({}, s);
1489 if (r[1].length === 0) { 1489 if (r[1].length === 0) {
1490 return r; 1490 return r;
1491 } 1491 }
1492 } catch (e) {} 1492 } catch (e) {}
1493 return g._start.call({}, s); 1493 return g._start.call({}, s);
1494 }; 1494 };
1495 $D._parse = $D.parse; 1495 $D._parse = $D.parse;
1496 $D.parse = function (s) { 1496 $D.parse = function (s) {
1497 var r = null; 1497 var r = null;
1498 if (!s) { 1498 if (!s) {
1499 return null; 1499 return null;
1500 } 1500 }
1501 if (s instanceof Date) { 1501 if (s instanceof Date) {
1502 return s; 1502 return s;
1503 } 1503 }
1504 try { 1504 try {
1505 r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1")); 1505 r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
1506 } catch (e) { 1506 } catch (e) {
1507 return null; 1507 return null;
1508 } 1508 }
1509 return ((r[1].length === 0) ? r[0] : null); 1509 return ((r[1].length === 0) ? r[0] : null);
1510 }; 1510 };
1511 $D.getParseFunction = function (fx) { 1511 $D.getParseFunction = function (fx) {
1512 var fn = $D.Grammar.formats(fx); 1512 var fn = $D.Grammar.formats(fx);
1513 return function (s) { 1513 return function (s) {
1514 var r = null; 1514 var r = null;
1515 try { 1515 try {
1516 r = fn.call({}, s); 1516 r = fn.call({}, s);
1517 } catch (e) { 1517 } catch (e) {
1518 return null; 1518 return null;
1519 } 1519 }
1520 return ((r[1].length === 0) ? r[0] : null); 1520 return ((r[1].length === 0) ? r[0] : null);
1521 }; 1521 };
1522 }; 1522 };
1523 $D.parseExact = function (s, fx) { 1523 $D.parseExact = function (s, fx) {
1524 return $D.getParseFunction(fx)(s); 1524 return $D.getParseFunction(fx)(s);
1525 }; 1525 };
1526 }()); 1526 }());
1527 1527
1528 // module.exports = { 1528 // module.exports = {
1529 // Date:Date 1529 // Date:Date
1530 // } 1530 // }
1531 1531
1532 module.exports = Date;
...\ No newline at end of file ...\ No newline at end of file
1532 module.exports = Date;
......