d3-time-format

此模块提供了C语言库中strptimestrftime函数的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 intervalmulti-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)

默认语言环境locale.utcFormat的别名。

d3.utcParse(specifier)

默认语言环境locale.utcParse的别名。

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)不同,它使用了更复杂的定义!

对于%Vstrftime 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)

返回一个给定definitionlocale对象,拥有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.timeformatd3.timeparsed3.utcformatd3.utcparse到新语言环境的locale.formatlocale.parselocale.utcformatlocale.utcparse。如果不设置默认语言环境,则默认为U.S. English(美国英语)。

例如,另请参阅Localized Time Axis

results matching ""

    No results matching ""