d3.time.scale
에는 multi-scale time formats을 사용하는 깔끔한 시간 포맷터가 있습니다. multi-scale time formats을 지정하는 API 또는 다른 방법이 있습니까?d3의 사용자 정의 다중 눈금 시간 형식
새로운 d3.time.format
을 만들 수는 있지만 멀티 스케일이 아닙니다.
감사합니다.
d3.time.scale
에는 multi-scale time formats을 사용하는 깔끔한 시간 포맷터가 있습니다. multi-scale time formats을 지정하는 API 또는 다른 방법이 있습니까?d3의 사용자 정의 다중 눈금 시간 형식
새로운 d3.time.format
을 만들 수는 있지만 멀티 스케일이 아닙니다.
감사합니다.
멀티 스케일 시간 형식은 d3.time.scale의 tickFormat 메서드로 반환 된 표준 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"가 사용됩니다. 등등.
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);
}
: 여기에 조건부 시간 포매터를 만드는 새로운 버전입니다