2012-08-03 2 views

답변

10

멀티 스케일 시간 형식은 d3.time.scaletickFormat 메서드로 반환 된 표준 API 이외의 공용 API로 공개되지 않습니다.

즉, implementation itself은 매우 간단하므로 많은 작업을하지 않고도 자신 만의 다중 스케일 시간 형식을 만들 수 있습니다. 다중 스케일 시간 형식은 단순히 time formats의 정렬 된 배열이며 각각은 연관된 테스트 기능을 가지고 있습니다. true를 반환하는 첫 번째 테스트 함수는 사용되는 시간 형식을 결정합니다.

[".%L", function(d) { return d.getMilliseconds(); }], 
    [":%S", function(d) { return d.getSeconds(); }], 
    ["%I:%M", function(d) { return d.getMinutes(); }], 
    ["%I %p", function(d) { return d.getHours(); }], 
    ["%a %d", function(d) { return d.getDay() && d.getDate() != 1; }], 
    ["%b %d", function(d) { return d.getDate() != 1; }], 
    ["%B", function(d) { return d.getMonth(); }], 
    ["%Y", d3_true] 

그래서, 예를 들면, 시간이 있으면 비제 밀리 :

d3.time.scale 의해 사용되는 시간 포맷은 역순으로 지정 (time/scale.js 찍은)는 다음과 같은 형식을 갖는다 필드를 사용하면 ". % L"형식이 사용됩니다. 그렇지 않으면 0이 아닌 초 필드가 있으면 ": % S"가 사용됩니다. 등등.

2

d3 버전 4에서 d3.time.format이 변경되었습니다.

https://github.com/d3/d3-time-format#d3-time-format

var formatMillisecond = d3.timeFormat(".%L"), 
    formatSecond = d3.timeFormat(":%S"), 
    formatMinute = d3.timeFormat("%I:%M"), 
    formatHour = d3.timeFormat("%I %p"), 
    formatDay = d3.timeFormat("%a %d"), 
    formatWeek = d3.timeFormat("%b %d"), 
    formatMonth = d3.timeFormat("%B"), 
    formatYear = d3.timeFormat("%Y"); 

function multiFormat(date) { 
    return (d3.timeSecond(date) < date ? formatMillisecond 
     : d3.timeMinute(date) < date ? formatSecond 
     : d3.timeHour(date) < date ? formatMinute 
     : d3.timeDay(date) < date ? formatHour 
     : d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek) 
     : d3.timeYear(date) < date ? formatMonth 
     : formatYear)(date); 
} 
: 여기에 조건부 시간 포매터를 만드는 새로운 버전입니다