1+ /**
2+ * Formatter for Date, parse and format with pattern
3+ *
4+ * @author © Denis Bakhtenkov [email protected] 5+ * @version 2016
6+ * @param {String } pattern
7+ * default is dd.MM.yyyy
8+ * @returns {SimpleDateFormatter }
9+ */
10+ var SimpleDateFormatter = function ( pattern ) {
11+ this . pattern = pattern || "dd.MM.yyyy" ;
12+ this . months = [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" ] ;
13+ } ;
14+
15+ /**
16+ * Return pattern
17+ * @returns {String }
18+ */
19+ SimpleDateFormatter . prototype . getPattern = function ( ) {
20+ return this . pattern ;
21+ } ;
22+
23+ /**
24+ * 'dd.MM.yyyy hh:mm:ss'
25+ * @param {Date } date
26+ * @returns {String }
27+ */
28+ SimpleDateFormatter . prototype . format = function ( date ) {
29+
30+ /**
31+ * Adding left 'zero' if value's length less than digits
32+ * @param {Number } value
33+ * @param {Number } digits
34+ * @returns {String }
35+ */
36+ function lzero ( value , digits ) {
37+ digits = digits || 2 ;
38+ var result = value . toString ( ) ;
39+ while ( result . length < digits ) {
40+ result = "0" + result ;
41+ }
42+ return result ;
43+ }
44+
45+ var variants = {
46+ yyyy : date . getFullYear ( ) ,
47+ yy : lzero ( date . getFullYear ( ) % 100 ) ,
48+ MMM : this . months [ date . getMonth ( ) ] ,
49+ MM : lzero ( date . getMonth ( ) + 1 ) ,
50+ dd : lzero ( date . getDate ( ) ) ,
51+ hh : lzero ( date . getHours ( ) ) ,
52+ mm : lzero ( date . getMinutes ( ) ) ,
53+ sss : lzero ( date . getMilliseconds ( ) , 3 ) ,
54+ ss : lzero ( date . getSeconds ( ) )
55+ } ;
56+
57+ var format = this . pattern ;
58+
59+ for ( var i in variants ) {
60+ format = format . replace ( i , variants [ i ] ) ;
61+ }
62+
63+ return format ;
64+ } ;
65+
66+ /**
67+ * 16.06.2016
68+ * dd.MM.yyyy
69+ *
70+ * @param {String } string
71+ * @returns {Date }
72+ */
73+ SimpleDateFormatter . prototype . parse = function ( string ) {
74+
75+ var date = new Date ( 0 ) ;
76+ var pat = this . pattern ;
77+ var input = string ;
78+ var variants = {
79+ yyyy : "date.setFullYear(parseInt(value));" ,
80+ yy : "date.setYear(parseInt(value) + 2000);" ,
81+ MMM : "date.setMonth(parseInt(value));" ,
82+ MM : "date.setMonth(parseInt(value) - 1);" ,
83+ dd : "date.setDate(parseInt(value));" ,
84+ hh : "date.setHours(parseInt(value));" ,
85+ mm : "date.setMinutes(parseInt(value));" ,
86+ sss : "date.setMilliseconds(parseInt(value));" ,
87+ ss : "date.setSeconds(parseInt(value));"
88+ } ;
89+
90+ for ( var i in variants ) {
91+ var pos = pat . search ( i ) ;
92+ if ( pos !== - 1 ) {
93+ var value = input . substr ( pos , i . length ) ;
94+ input = input . substring ( 0 , pos ) + input . substring ( pos + i . length ) ;
95+ pat = pat . substring ( 0 , pos ) + pat . substring ( pos + i . length ) ;
96+ if ( i === "MMM" ) {
97+ for ( var j in this . months ) {
98+ if ( value === this . months [ j ] ) {
99+ value = j ;
100+ eval ( variants [ i ] ) ;
101+ break ;
102+ }
103+ }
104+ } else {
105+ eval ( variants [ i ] ) ;
106+ }
107+ }
108+ }
109+
110+ return date ;
111+ } ;
0 commit comments