최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

차트 데이터를 사용하기 위해서 클라이언트에서 데이터를 생성합니다.


In order to use graph data, we generate data from the client.



source : 

MakeChartDate.html

moment-with-locales.min.js




  MakeChartDate                                                           ver 2017.02.22  

 

Description: 차트데이터를 생성합니다.

 

Query
String


Input Name Value (기본값) parameter comment
format : String YYYY-MM-DD HH:mm:ss

리턴받을 날짜 형식을 지정합니다.

기본값은 YYYY-MM-DD HH:mm:ss 이며,

날짜설정 옵션은 문서하단의 Format 항목을 참조하세요.

categoryField :

String

category 카테고리(대상) 필드명을 설정합니다. 기본값은 category 입니다.

fromDate :

Date / String

new Date().setDate( new Date().getDate()-1 )

기본값은 하루전 날짜이며, 데이터형식 new Date() 혹은

문자열 형식 "2017-02-22 10:51:23" 으로 값을 받습니다.

toDate :
Date / String
new Date()

기본값은 현재 날짜이며, 데이터형식 new Date() 혹은

문자열 형식 "2017-02-22 10:51:23" 으로 값을 받습니다.

intervalSeconds :

Number

15 * 60

날짜 데이터의 주기이며 단위는 Seconds 입니다.

기본값은 90015 * 60 = 15분 이며,

30분일 경우 1800 혹은 30 * 60 처럼 입력합니다.

valueField :
String / Array
VAL

값이 표기될 필드명을 설정합니다. 기본값은 VAL 입니다.

만약 값이 여러개일 경우 Array[ VAL_0, VAL_1, VAL_2 ... ]로 설정하세요.

valueMin :

Number / Array

1

값 생성에 사용될 최소값. 기본값은 1 입니다.

만약 valueField에서 설정된 값이 배열일 경우 valueMin 항목도

배열로 최소값을 설정할 수 있습니다. Array[ 1, 100, 200 ... ]

valueMax :

Number / Array

100

값 생성에 사용될 최대값. 기본값은 100 입니다.

만약 valueField에서 설정된 값이 배열일 경우 valueMax 항목도

배열로 최대값을 설정할 수 있습니다. Array[ 1, 100, 200 ... ]

postfix : Object {"rqSource":"client", "ErrCode":0, "ErrMsg":"Success"}

postfix 될 json 옵션입니다. 기본값은 아래와 같습니다.

{"rqSource":"client", "ErrCode":0, "ErrMsg":"Success"}

 

Note!!

postfix 옵션을 사용하지 않으려면 "" (공백) 혹은 null 값을 사용하길 권장하며

postfix 옵션을 사용하게 되면 자동으로 Total 항목과 Record 항목이 추가되어

결과를 리턴합니다.

debug : Boolean false

디버그 모드. 기본값은 false.

true로 설정시 콘솔 객체 그룹에

 

1. 파라메터로 받은 날짜

2. unix 로 변환된 날짜

3. unix를 결과에 출력하기위해 다시 format 형식으로 반환하는 날짜

 

이렇게 총 3개의 날짜 형식을 출력합니다.

 

 

 .json                                                                                                                         Returns: Object  
 

객체에서  .json()  을 사용하여 생성된 차트값을 리턴받습니다.

 

1
2
var dateJson = new GetDateJson();
console.log( dateJson.json );
cs

 


 

 .json( Object )                                                                                                                                    

 

생성된 객체에서  .json( Object )  을 사용하여 옵션을 변경합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
var dateJson2 = new GetDateJson();
dateJson2.json = {
    "debug"true,
    "format"            : "YYYY-MM-DD HH",
    "fromDate"            : "2017-03-01 12",
    "toDate"            : "2017-03-03 17",
    "intervalSeconds"    : 60*60,
    "valueField"        : ["VAL_0""VAL_1""VAL_2"],
    "valueMin"            : [1,100,200],
    "valueMax"            : [100,200,300],
};
console.log( dateJson2.json );
cs

Format

Token Output
Month M 1 2 ... 11 12
  Mo 1st 2nd ... 11th 12th
  MM 01 02 ... 11 12
  MMM Jan Feb ... Nov Dec
  MMMM January February ... November December
Quarter Q 1 2 3 4
  Qo 1st 2nd 3rd 4th
Day of Month D 1 2 ... 30 31
  Do 1st 2nd ... 30th 31st
  DD 01 02 ... 30 31
Day of Year DDD 1 2 ... 364 365
  DDDo 1st 2nd ... 364th 365th
  DDDD 001 002 ... 364 365
Day of Week d 0 1 ... 5 6
  do 0th 1st ... 5th 6th
  dd Su Mo ... Fr Sa
  ddd Sun Mon ... Fri Sat
  dddd Sunday Monday ... Friday Saturday
Day of Week (Locale) e 0 1 ... 5 6
Day of Week (ISO) E 1 2 ... 6 7
Week of Year w 1 2 ... 52 53
  wo 1st 2nd ... 52nd 53rd
  ww 01 02 ... 52 53
Week of Year (ISO) W 1 2 ... 52 53
  Wo 1st 2nd ... 52nd 53rd
  WW 01 02 ... 52 53
Year YY 70 71 ... 29 30
  YYYY 1970 1971 ... 2029 2030
  Y 1970 1971 ... 9999 +10000 +10001
Note: This complies with the ISO 8601 standard for dates past the year 9999
Week Year gg 70 71 ... 29 30
  gggg 1970 1971 ... 2029 2030
Week Year (ISO) GG 70 71 ... 29 30
  GGGG 1970 1971 ... 2029 2030
AM/PM A AM PM
  a am pm
Hour H 0 1 ... 22 23
  HH 00 01 ... 22 23
  h 1 2 ... 11 12
  hh 01 02 ... 11 12
  k 1 2 ... 23 24
  kk 01 02 ... 23 24
Minute m 0 1 ... 58 59
  mm 00 01 ... 58 59
Second s 0 1 ... 58 59
  ss 00 01 ... 58 59
Fractional Second S 0 1 ... 8 9
  SS 00 01 ... 98 99
  SSS 000 001 ... 998 999
  SSSS ... SSSSSSSSS 000[0..] 001[0..] ... 998[0..] 999[0..]
Time zone z or zz EST CST ... MST PST
Note: as of 1.6.0, the z/zz format tokens have been deprecated from plain moment objects. Read more about it here. However, they *do* work if you are using a specific time zone with the moment-timezone addon.
  Z -07:00 -06:00 ... +06:00 +07:00
  ZZ -0700 -0600 ... +0600 +0700
Unix Timestamp X 1360013296
Unix Millisecond Timestamp x 1360013296123

Examples 1:

code) 객체 생성후 .json 으로 기본옵션 설정된 값을 호출합니다.

 

1
2
var makeChartDate = new MakeChartDate();
console.log( makeChartDate.json );
cs

 

결과)

날짜데이터1.png

 


 

Examples 2:

code) 객체 생성후 .json( Object ) 로 옵션을 수정하고 설정된 값을 호출합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
var makeChartDate2 = new MakeChartDate();
makeChartDate2.json = {
    "debug"true,
    "postfix""",
    "format"            : "YYYY-MM-DD HH",
    "fromDate"            : "2017-03-01 12",
    "toDate"            : "2017-03-03 17",
    "intervalSeconds"    : 60*60,
    "valueField"        : ["VAL_0""VAL_1""VAL_2"],
    "valueMin"            : [1,100,200],
    "valueMax"            : [100,200,300],
};
console.log( makeChartDate2.json );
cs

 

결과)

 

날짜데이터2.png

 

 


 

Examples 3:

code) 객체생성과 동시에 옵션 Object 을 전달하여도 .json( Object ) 와 동일 한 결과를 리턴합니다.

 

1
2
3
4
5
6
7
8
9
10
11
var makeChartDate3 = new MakeChartDate({
    "debug"true,
    "format"            : "YYYY-MM-DD HH",
    "fromDate"            : "2017-05-01 12",
    "toDate"            : "2017-05-05 17",
    "intervalSeconds"    : 60*60,
    "valueField"        : ["VAL_0""VAL_1"],
    "valueMin"            : [1,100],
    "valueMax"            : [100,200],
});
console.log( makeChartDate3.json );

cs

 

 

 

결과)

 

날짜3.png

 

 

Code : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
var MakeChartDate = function($obj){
    
    //private
    var name = "MakeChartDate";
    var author = "허정진";
    var ver = "2017.02.22";
    
    //public
    this.name = name;
    this.resultJson;
    //this.extends = this.inherit( MakeChartDate, this.extends ); //instance extend
 
    //extend
    this.defaultObj = {
        "format"            : "YYYY-MM-DD HH:mm:ss",
        "categoryField"        : "category",
 
        "fromDate"            : new Date().setDate( new Date().getDate()-1 ),
        "toDate"            : new Date(),
 
        "intervalSeconds"    : 15 * 60,
        
        "valueField"        : "VAL",
        "valueMin"            : 1,
        "valueMax"            : 100,
 
        //"valueField"        : ["VAL_0", "VAL_1", "VAL_2"],
        //"valueMin"            : [1,100,200],
        //"valueMax"            : [100,200,300],
        
        "postfix"            : {"rqSource":"client""ErrCode":0"ErrMsg":"Success"},
        "debug"                : false,
    };
 
    for(var key in $obj){
        if( $obj.hasOwnProperty(key) ){
            this.defaultObj[key] = $obj[key];
        }
    }
 
    //build
    this.build.classLength++;
    this.build();
}//end. MakeChartDate
 
MakeChartDate.prototype = (function(){
 
    return{
        
        //
        build: function(){
//            if( typeof this.control == "undefined" || this.control.name != "Control"  ){
//                throw new Error( "["+this.name+"] : Control 객체를 상속받지 못했습니다. Control 객체를 먼저 '생성'해 주세요." );
//                return false;
//            }
        },
        
        inherit: function( Parent, Child ){
            Child = function(){
                Parent.call( this );
            }
            
            try{
                if (!Object.create) {
                    Object.create = (function(){
                        function F(){}
                            return function(o){
                            if (arguments.length != 1) {
                                throw new Error('Object.create 구현은 한개의 매개변수만 받아들입니다. ( Object.create implementation only accepts one parameter. )');
                            }
                            F.prototype = o;
                            return new F();
                        }
                    })();
                }
                
                Child.prototype = Object.create( Parent.prototype );
                
                Child.prototype.constructor = Child;
                
                //override
                //Child.prototype.build = function(){ alert('hi, I am a Child'); };
                
                var child = new Child();
                if(child instanceof Parent === true
                    return child;
                else 
                    return new Parent();
 
            }catch(e){
                throw new Error( "[ inherit Error ] : "+ Parent.name +"객체를 상속받지 못했습니다. "+ Parent.name +" 객체를 '확인'해 주세요." );
            }
        },
 
        getValue:function(){
            
            var _this = this;
 
            var categoryField    = _this.defaultObj.categoryField;
 
            var fromDate        = _this.defaultObj.fromDate;
            var fromDateUnix    = moment(fromDate).unix(); //=>
 
            var toDate            = _this.defaultObj.toDate;
            var toDateUnix        = moment(toDate).unix(); //=>
 
            var intervalSeconds = _this.defaultObj.intervalSeconds;
            var format            = _this.defaultObj.format;
            
            var arr = [];
            var obj = {};
            
            if( _this.defaultObj.debug ){
                console.group( "[ "+_this.name + "Class ] debug : "+_this.defaultObj.debug );
 
                console.log( "[ 입력받은 날짜 ] "+ fromDate +" / "+toDate );
 
                console.log( "[ Unix 변환 moment(Date).unix() ] "+fromDateUnix +" / "+toDateUnix );
 
                console.log( "[ 날짜변환 moment().unix(Date) ] "+moment.unix(fromDateUnix).format(format) +" / "+ moment.unix(toDateUnix).format(format) );
 
                console.groupEnd();
            }
            
            for(var i = fromDateUnix; i<=toDateUnix; i++){
                if( i % intervalSeconds == 0 ){
                    obj = {};
                    obj[categoryField]    = moment.unix(i).format(format);
                    _this.getValueProcessing(obj);
 
                    arr.push( obj );
                }
            }
            _this.resultJson = _this.getJsonMerge( arr );
        },
 
        getValueProcessing:function($obj){
            
            var _this = this;
            
            var valueField    = _this.defaultObj.valueField;
            var valueMin    = _this.defaultObj.valueMin;
            var valueMax    = _this.defaultObj.valueMax;
            
            var vMin = valueMin; //배열이 아닌경우 기본값 적용을 위해서
            var vMax = valueMax;
            
            if( (typeof valueField).toLowerCase() == "string" ){
                $obj[valueField] = _this.getRandomize(valueMin, valueMax, true);
            }else
            if(  Object.prototype.toString.call( valueField ) === '[object Array]' ){
 
                valueField.forEach(function(item, index, array){
                    
                    ifObject.prototype.toString.call( valueMin ) === '[object Array]' ) {
                        vMin = valueMin[index];
                    }
                    ifObject.prototype.toString.call( valueMax ) === '[object Array]' ) {
                        vMax = valueMax[index];
                    }
                    $obj[item] = _this.getRandomize(vMin, vMax, true);
                });
            }
        },
        
        getJsonMerge: function($arr){
 
            var _this = this;
            var postfix    = _this.defaultObj.postfix;
            
            if( postfix == "" || postfix == null || postfix.length < 0 ){
                return $arr;
            }else{
                postfix.Total = $arr.length;
                postfix.Record = $arr;
 
                return postfix;
            }
        },
 
        getRandomize:function($min, $max, $maxValueContainBool){
            
            var ver = "2017.02.22 허정진";
 
            iftypeof $min == "undefined" || typeof $max == "undefined" ){
                throw new Error("[ "+this.name + "Class ] getRandomize : 매개변수가 없습니다.");
            }
 
            var min = parseInt($min, 10);
            var max = parseInt($max, 10);
 
            if( min === max ) return min;
            else{
                $maxValueContainBool = $maxValueContainBool || true;
                return Math.floor(Math.random() * ($max - $min + $maxValueContainBool)) + $min;
            }
        },
        
        disable: function(){},
        enable: function(){},
        destroy: function(){
 
            //주의!!. dispose는 맨 마지막으로 실행한다. 소거.
            this.dispose();
        },
 
        dispose: function(){
 
            var object = this;
            var objectPrototype = object.__proto__;
            
            forvar key in object ){
                if( object.hasOwnProperty(key) ){
                    delete object[key];
                }
            }
            delete this.prototype;
 
            return;
 
            forvar key in objectPrototype ){
                if( objectPrototype.hasOwnProperty(key) ){
                    delete objectPrototype[key];
                }
            }
        }, //end. dispose
 
        get json(){
            this.getValue();
            return this.resultJson;
        },
        set json($obj){
            for(var key in $obj){
                if( $obj.hasOwnProperty(key) ){
                    this.defaultObj[key] = $obj[key];
                }
            }
        }
    };
    
})();
cs


 

댓글