날짜 서식 YUI가있는 방 - 파트 III

2009년 3월 18일 있음 텔리스 | 필립에 의해 오후 2시 59분 개발 | 2 댓글

, 우리가보고하는 방법을 쉽게 형식 및 날짜를 사용하여 유이네 날짜 포맷 제 2 부 우리가 제어 할 DataTable을위한 날짜를 보였에서 서식. 우리가보고있는 것이다 살펴보고 지금 어떻게 날짜 형식에 YUI 차트 제어할 수 있습니다.

흥미롭게도, 처음 날짜 포맷의 발전에 주도 차트 컨트롤을했다. 우리는 시간 시리즈 차트를 구축했고 형식으로 날짜에 필요한 여러 지역에서 다르게. X가 - 범위 차트로 표시에 적합한하는 데 필요한 축 데이트가 함께 표시됩니다. 예를 들어, 데이터 걸친 개월 동안, 우리는 한 달 - 일 수준에있다면, 원하는 레이블 및 데이터 데이터 년간, 우리는 달과 연도 표시 라벨을 싶었어요. 우리는 또한 1월 "와 같은 인간 친화적인 형식으로 전체 기간을 표시하려면 차트의 캡션을 원한 - 3 월 2008". 마지막으로 차트 마우스 가져가 지점에 대한 정확한 날짜를 표시하는 툴팁이 필요했습니다.

우리도 모두 사전 형식의 문자열을 백 엔드에서 PHP를 사용하여, 해당 날짜에 데이터의 렌더링거나 우리는 프런트 엔드에 원시 날짜 데이터를 보낼 수 및 JavaScript를 적절하게 그것을 렌더링합니다. 우리는 두 번째 옵션, 데이터 중복을 줄이고, 그리고 페이로드 크기를 줄이기 위해 MVC 패턴과 일치 더 남아있었습니다. 유일한 문제는 물론, 자바 스크립트 였죠에 서식 데이트 PHP는 않을만큼 쉽게 strftime 또는 date 함수. 그 포트의 때 결정한 우리가 strftime 자바 스크립트합니다.

굳이 말하자면 지금은 예를 들어 진행하고 시도 제가 위에서 설명한 것처럼 차트를 생성할 수 있습니다. 우리는 차트 YUI거야 시작과 빠른 예 ,하지만 대신 문자열 개월 근무와 함께, 우리는 유닉스 타임 스탬프거야에 따라 사용할 데이터와 달 15 일 대한 데이터 작업.

데이터 소스는 다음과 같이한다 :

 YAHOO.example.expenses =
 [
     / / 참고 : 유닉스 타임 스탬프 출력 초 원기 이후로,
     / / 1000로 JS 타임 스탬프를 얻으려면 곱하면
	 (날짜 : 1199174400000, 임대 : 880.00, 유틸리티 : 894.68),
	 (날짜 : 1201852800000, 임대 : 880.00, 유틸리티 : 901.35),
	 (날짜 : 1204358400000, 임대 : 880.00, 유틸리티 : 889.32),
	 (날짜 : 1207033200000, 임대 : 880.00, 유틸리티 : 884.71),
	 (날짜 : 1209625200000, 임대 : 910.00, 유틸리티 : 879.811)
	 (날짜 : 1212303600000, 임대 : 910.00, 유틸리티 : 897.95),
	 (날짜 : 1214895600000, 임대 : 910.00, 유틸리티 : 894.68),
	 (날짜 : 1217574000000, 임대 : 910.00, 유틸리티 : 901.35),
	 (날짜 : 1220252400000, 임대 : 910.00, 유틸리티 : 889.32),
	 (날짜 : 1222844400000, 임대 : 910.00, 유틸리티 : 884.71),
	 (날짜 : 1225522800000, 임대 : 910.00, 유틸리티 : 889.81),
	 (날짜 : 1228118400000, 임대 : 910.00, 유틸리티 : 897.95),
	 (날짜 : 1230796800000, 임대 : 910.00, 유틸리티 : 894.68),
	 (날짜 : 1233475200000, 임대 : 910.00, 유틸리티 : 921.35),
	 (날짜 : 1235894400000, 임대 : 910.00, 유틸리티 : 889.32)
 ];

 var에의 성 = 0; = YAHOO.example.expenses.length - 1 ko를;

 YAHOO.example.getData = 함수 () (
	 var에 데이터 = []를;
	 var에 나는 = 성; 나는 <= ko 페이지 (용; 난 + +) (
		 (data.push YAHOO.example.expenses은 [내가]);
	 )
	 반환 데이터;
 )

 var에 myDataSource = 새로운 YAHOO.util.DataSource (YAHOO.example.getData);
 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
 myDataSource.responseSchema =
 (
	 분야 : [ "날짜", "임대", "유틸리티"]
 );

우리는 데이터를 그래서 우리는 그것의 하위 집합을 여러 기준으로 돌아올 수 있습니다 반환하는 함수를 사용하여 실행합니다.

우리는 예를 들어 같은 우리의 차트의 대부분을 설정합니다 :

 / / 정의 여러 시리즈
 var에 seriesDef = 
 [
	 (displayName : "임대료", yField : "임대"),
	 (displayName : "유틸리티", yField : "유틸리티를")
 ];

 Y 축 따라 통화 형식 번호에 / / 정의하는 사용자 정의 함수
 YAHOO.example.formatCurrencyAxisLabel = 기능 (값)
 (
	 반환 YAHOO.util.Number.format (값,
	 (
		 접두사 : "$",
		 thousandsSeparator : ",",
		 decimalPlaces : 2
	 ));
 )

 var에 currencyAxis = 새로운 YAHOO.widget.NumericAxis ();
 = 800 currencyAxis.minimum;
 currencyAxis.labelFunction = YAHOO.example.formatCurrencyAxisLabel;

 때 데이터 포인트 mouseover 나타나기 / / 만들기 도구 팁을
 YAHOO.example.getDataTipText = 함수 (항목, 색인, 시리즈)
 (
	 var에 TooltipText은 series.displayName + = "+ item.date"에 대한;
	 TooltipText + =이 "\ n"+ YAHOO.example.formatCurrencyAxisLabel (항목 [series.yField]);
	 반송 TooltipText;
 )

 / / 만들기 차트
 var에 mychart = 새로운 YAHOO.widget.LineChart ( "차트", myDataSource, (
		 시리즈 : seriesDef,
		 xField : "날짜",
		 yAxis : currencyAxis,
		 dataTipFunction : YAHOO.example.getDataTipText
	 )
 );

이 차트는 아주 우리가 비록 싶어하지 않습니다. 그것은 도구 팁에서 원시 타임 스탬프를 표시하고 X 축 있습니다. 이것을 해결하려면, 우리는 모두 이러한 날짜 포맷을 사용하여 사용자 정의해야합니다. 로 시작 getDataTipText 작동합니다. 변경된 라인을 굵은 글씨로 표시된 참고 사항 :

 YAHOO.example.getDataTipText = 함수 (항목, 색인, 시리즈)
 (
	 var에 d 개 = 새로운 날짜 (item.date); 
	  var에 sDate = YAHOO.util.Date.format (라, (형식 : "% B의 % Y"는));
	 var에 TooltipText은 = series.displayName + "sDate +에 대한";
	 TooltipText + =이 "\ n"+ YAHOO.example.formatCurrencyAxisLabel (항목 [series.yField]);
	 반송 TooltipText;
 )

우리는 또한 X 축에 대한 융통성있는 레이블 포맷 터를 정의해야합니다 :

 YAHOO.example.xFormat = "% 아침 식사 % d 개";
 YAHOO.example.formatDate = 기능 (값)
 (
	 var에 d 개 = 새로운 날짜 (값);
	 반환 YAHOO.util.Date.format (라, YAHOO.example.xFormat ());
 )

 var에 timeAxis = 새로운 YAHOO.widget.TimeAxis ();
 timeAxis.majorTimeUnit = "월";
 timeAxis.labelFunction = YAHOO.example.formatDate;

그리고 차트 생성자에서이 작업을 전달합니다. 이전 생성자 굵은 글씨로 표시된에 대한 변경 사항을 확인합니다.

 var에 mychart = 새로운 YAHOO.widget.LineChart ( "차트", myDataSource, (
		 시리즈 : seriesDef,
		 xField : "날짜",
		 yAxis : currencyAxis,
		 xAxis : timeAxis,
		 dataTipFunction : YAHOO.example.getDataTipText
	 )
 );

마지막으로, 우리는 조금 기능을 캡션을 끌기 위해 작성하고 X 축 레이블 형식을 변경할 수 있습니다.

 기능 refreshChart () (
	 (이 this.nodeName & & & & this.nodeName.toUpperCase () == '버튼') (면
		 var에 범위 = this.id.split ("_");을
		 성 = parseInt (범위 [1], 10);
		 ko를 = parseInt (범위 [2], 10);
	 )
	 var에 캡션 = '';
	 var에 YAHOO.example.expenses 세인트]를 [D1에 = 새로운 날짜 (. 날짜);
	 var에 YAHOO.example.expenses 소리] ko 페이지 [d2 = 새로운 날짜 (. 날짜);

	 (d1.getFullYear ()면! = d2.getFullYear ()) (
		 캡션 = YAHOO.util.Date.format (D1에, (형식 : "% b % Y의 -"))
					 + YAHOO.util.Date.format (d2, (형식 : "% 아침의 % Y"는));
		 YAHOO.example.xFormat = "% 아침 식사 '% y는";
	 ) 다른면 (d1.getMonth ()! = d2.getMonth ()) (
		 캡션 = YAHOO.util.Date.format (D1에, (형식 : "% b -"))
					 + YAHOO.util.Date.format (d2, (형식 : "% 아침의 % Y"는));
		 YAHOO.example.xFormat = "% 아침 식사";
	 다른) (
		 캡션 = YAHOO.util.Date.format (D1에, (형식 : "% d 개 % b -"))
					 + YAHOO.util.Date.format (d2, (형식 : "% d 개의 % 아침 식사, % Y"는));
	     YAHOO.example.xFormat = "%의 고도 - % d 개";
	 )

	 YAHOO.util.Dom.get ( "캡션"). innerHTML = 캡션;

	 / / 데이터의 새로운 범위와 차트를 다시 그리기
	 mychart.refreshData ();
 )

 refreshChart ();

 YAHOO.util.Event.on (document.getElementsByTagName ( ''), '다음', refreshChart) 버튼;

이 기능은 언제든지 우리는 데이터 표시의 범위를 변경할 수라고합니다. 이렇게하려면, 우리는 그것을 첨부 onclick 버튼 선택 이벤트의 우리의 범위. 저희는 또한 바로 시작할 수 있도록 자막이 제대로 그려진에서 전화를했습니다. 범위 선택 버튼에 대한 마크업은 다음과 같이한다 :

 <button은 1 분기 '08 </ 버튼>을 id="b_0_2">
 <button id="b_3_5"> 질문 '08 </ 버튼>
 <button id="b_6_8"> 분기 '08 </ 버튼>
 <button는 4 분기 '08 </ 버튼>을 id="b_9_11">

 <button은 1 분기 '09 </ 버튼>을 id="b_12_14">
 <button id="b_0_14"> 전체 범위 </ 버튼>

같이 다 모아, 우리가받을 사용자 정의 날짜 형식의 차트를 . 도구 팁은 전체 달 1 년 동안 표시 사항은 X 축 쇼에 라벨 개월 년이 약식 방법.

이 시리즈의 마지막 부분에서 우리는 국제 웹 애플 리케이션을위한 최신의 현지화 알아보겠습니다.

공유 및 연장 : 북마크와 del.icio.us | Digg Digg에 그것을! | 레딧!

2 개의 코멘트 »

게시할 수 있습니다. 여기에 덧글에 대한 RSS 피드 트랙백 URI를

  1. / / 참고 : 유닉스 타임 스탬프 출력 초 원기 이후로,
    / / 1000로 JS 타임 스탬프를 얻으려면 곱하면

    거기 유닉스 타임 스탬프를하지 가진 게 뭔가. 에는 초과 '0 '숫자로 표시하고 아마 당신은 증식하지 나눌 뜻. 예를 들어 첫 5 라인이 너절하게있다면 나머지 부분을 읽으려고하지도 않았

    poolboy에 의해 코멘트 - 2009년 3월 18일 #

  2. 유닉스 타임 스탬프는 초 단위로하는, 자바 스크립트의 타임 스탬프는 밀리초 단위입니다. 뭘에서 위의 예제에서 찾고 Javascript를 타임 스탬프, 즉 밀리초입니다. 숙련된 프로그래머에 타임 스탬프를 처리하기 위해 PHP가 또는 C + +, 거기 초과 '0 것으로 나타날 것이라고한다. 세 가지 사실 추가. 난 항상 조금 불편한 내가 그걸 보면 느끼지만, 그것은 당신을 위해 자바 스크립트이야 :) - 적어도 별도 HiResTime 개체에 대한 필요.

    예제가 올바른지만. 그것을 밖으로보십시오. 그 게시물의 끝에 작동하는 링크가.

    로 댓글 필립 텔리스 - 2009년 3월 19일 #

코멘트를 남겨주세요

참고 사항 : 덧글이 타이머 - 첫 검토됨합니다. 스팸 메일이 삭제되었습니다.

XHTML은 :은 <a href=""은 title=""> <abbr title=""> <acronym가 title=""> <b> 다운 <blockquote=""> <부호> <cite> <code> <del datetime=""> <em> 사용 <i> <q <부호> <strike> <strong>

야후 호스팅!

저작권 © 2006에서 2010 사이 야후! 주식 회사 판권. 소유 개인 정보 보호 정책 - 서비스 약관

에 의해 구동 WordPress에야후! 웹 호스팅 .