d3-time-format
此模块提供了C语言库中strptime和strftime函数的JavaScript实现,可以用来解析或格式化不同地区的dates表现。想要格式化日期,先从标识符(一个所需的格式化指令字符串,用%
作为标识)中创建一个formatter;然后将日期传入formatter,它将返回一个字符串。例如,将当前日期转换为可读字符串:
var formatTime = d3.timeFormat("%B %d, %Y");
formatTime(new Date); // "June 30, 2015"
同样,要将字符串转换为日期,创建一个parser:
var parseTime = d3.timeParse("%B %d, %Y");
parseTime("June 30, 2015"); // Tue Jun 30 2015 00:00:00 GMT-0700 (PDT)
你还可以实现更复杂的条件时间格式。例如,这是一个使用time interval的multi-scale 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);
}
此模块被D3的时间比例尺用于生成可读的刻度。
Installing
如果你使用npm,请键入npm install d3-polygon
。否则,请下载最新版本。你也可以直接从d3js.org加载,作为standalone library(独立库)或D3 4.0的一部分来使用。支持AMD,CommonJS和vanilla环境。在vanilla环境下,会输出一个全局的d3
:
<script src="https://d3js.org/d3-time.v1.min.js"></script>
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
<script>
var format = d3.timeFormat("%x");
</script>
本地文件存放于unpkg,可以使用d3.json加载。例如,将俄罗斯设为默认语言环境:
d3.json("https://unpkg.com/d3-time-format@2/locale/ru-RU.json", function(error, locale) {
if (error) throw error;
d3.timeFormatDefaultLocale(locale);
var format = d3.timeFormat("%c");
console.log(format(new Date)); // понедельник, 5 декабря 2016 г. 10:31:59
});
API Reference
d3.timeFormat(specifier)
默认语言环境下locale.format的别名。
d3.timeParse(specifier)
默认语言环境下locale.parse的别名。
d3.utcFormat(specifier)
d3.utcParse(specifier)
d3.isoFormat
完整ISO 8601 UTC时间formatter。如果可用,此方法将使用Date.toISOString进行格式化。
d3.isoParse
完整ISO 8601 UTC时间parser。如果可用,此方法将使用Date constructor解析字符串。如果你依赖于ISO 8601对输入格式严格验证,则应该构造一个UTC parser函数。
var strictIsoParse = d3.utcParse("%Y-%m-%dT%H:%M:%S.%LZ");
locale.format(specifier)
返回给定的字符串specifier的一个新的formatter。specifier字符串可能包含以下指令:
%a
- 星期的缩写名*%A
- 星期的全名*%b
- 月份的缩写名*%B
- 月份的全名*%c
- 当地的日期和时间,如%x, %X
*%d
- 十进制的日期(小于10的用0补充)[01,31]%e
- 十进制的日期(小于10的用空格补充)[ 1,31],相当于%_d
%f
- 十进制微秒数[000000, 999999]%H
- 十进制小时(24小时制) [00,23]%I
- 十进制小时(12小时制) [01,12]%j
- 按十进制计算的一年中的一天 [001,366]%m
- 按十进制计算的月份 [01,12]%M
- 按十进制计算的分钟 [00,59]%L
- 按十进制计算的毫秒 [000, 999]%p
- 上午(AM)或者下午(PM)*%Q
- UNIX epoch(UNIX时间戳)毫秒%s
- UNIX epoch(UNIX时间戳)秒%S
- 按十进制计算的秒 [00,61].%u
- 按十进制计算以星期一(ISO 8601)为起点 星期[1,7].%U
- 按十进制计算以星期天为起点的星期 [00,53].%V
- 按十进制计算的ISO 8601标准的周数[01, 53].%w
- 按十进制计算以星期天为起点的星期 [0,6].%W
- 按十进制计算以星期一为起点的周数[00,53].%x
- 本地日期,如%-m/%-d/%Y
.*%X
- 本地时间,如%-I:%M:%S %p
.*%y
- 按十进制计算不包含世纪的年数 [00,99].%Y
- 按十进制计算包含世纪的年数%Z
- 时区偏移量,如:-0700
,-07:00
,-07
, 或Z
.- %% - 百分号 (
%
).
标有星号(*)的指令可能受到语言环境定义的影响。
对于%U
,第一个星期日前一年的所有天数都被认为是第0周。对于%W
,第一个星期一前一年的所有天数都被认为是第0周。周数计算使用的是interval.count。例如,2015-52和2016-00代表2015年12月28日星期一,而2015-53和2016-01代表2016年1月4日星期一。这与ISO week date标识符(%V
)不同,它使用了更复杂的定义!
对于%V
,strftime man page中的总论为:
在这个系统中,一周从星期一开始,第一周用01表示,最后一周用52或53表示。第1周是第一周,有4天或更多天在新的一年中(或者,同义词,第01周是:一年的第一周包含一个周四;或者,第一周包含1月4号)
%
表示指令后面可以跟上填充修饰符:
0
- 用0填充_
- 用空格填充-
- 禁用填充
如果不指定填充修饰符,则默认对所有指令使用0
,而对%e
使用_
。(在一些strftime和strptime的实现中,指令可以包含一个可选的字段宽度或精度;此功能尚未实现。
返回的函数将格式化给定的date,返回相应的字符串。
var formatMonth = d3.timeFormat("%B"),
formatDay = d3.timeFormat("%A"),
date = new Date(2014, 4, 1); // Thu May 01 2014 00:00:00 GMT-0700 (PDT)
formatMonth(date); // "May"
formatDay(date); // "Thursday"
locale.parse(specifier)
返回给定字符串specifier的一个新parser。specifier字符串可以包含和locale.format一样的指令。%d
和%e
在解析时被认为是相同的指令。
返回的函数将解析给定的字符串,并返回相应的date或null(如果字符串无法用此解析)。解析是严格的:如果给定的字符串不能完全匹配的specifier,此方法返回null。例如,如果specifier为%Y-%m-%dT%H:%M:%SZ
,则字符串"2011-07-01T19:15:28Z"
将按预期解析,但是"2011-07-01T19:15:28"
, "2011-07-01 19:15:28"
和"2011-07-01"
将返回null。(注意,这里的文字z
与时区偏移量指令%Z
不同)如果需要更灵活的parser,依次尝试多种格式,直到返回一个非null格式为止。
locale.utcFormat(specifier)
相当于locale.format,除了所有指令都被解释为Coordinated Universal Time (UTC),而不是本地时间。
locale.utcParse(specifier)
相当于locale.parse,除了所有指令都被解释为Coordinated Universal Time (UTC),而不是本地时间。
Locales
d3.timeFormatLocale(definition)
返回一个给定definition的locale对象,拥有locale.format, locale.parse, locale.utcFormat, locale.utcParse方法。definition必须包含以下属性:
dateTime
- 日期和时间(%c
)格式标识符(如,"%a %b %e %X %Y"
).date
- 日期(%x)格式标识符 (如,"%m/%d/%Y"
).time
- 时间(%X)格式标识符 (如,"%H:%M:%S"
).periods
- 上午和下午对应词 (如,["AM", "PM"]
).days
- 星期的全名,从星期天开始shortDays
- 星期的缩写名,从星期天开始months
- 月份的全名(从一月开始)shortMonths
- 月份的缩写名(从一月开始)
例如,另请参阅Localized Time Axis II。
d3.timeFormatDefaultLocale(definition)
相当于d3.timeFormatLocale,除了它重新定义了d3.timeformat,d3.timeparse,d3.utcformat和d3.utcparse到新语言环境的locale.format,locale.parse,locale.utcformat和locale.utcparse。如果不设置默认语言环境,则默认为U.S. English(美国英语)。
例如,另请参阅Localized Time Axis。