vega-time 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -71,6 +71,12 @@ The supported options properties are:
71
71
  - _extent_: (required) A two-element (`[min, max]`) array indicating the date range over which the bin values are defined.
72
72
  - _maxbins_: The maximum number of allowable bins (default `40`). There will often be fewer bins as the domain gets sliced at "nicely" rounded values.
73
73
 
74
+ <a name="detectTimeUnits" href="#detectTimeUnits">#</a>
75
+ vega.<b>detectTimeUnits</b>(<i>data</i>, <i>field</i>[, <i>utc</i>])
76
+ [<>](https://github.com/vega/vega/blob/master/packages/vega-time/src/detectTimeUnits.js "Source")
77
+
78
+ Detect the time granularity of already-discretized date-time values, for example data pre-binned by month. Given an array of _data_ objects and a _field_ accessor for date-time values, returns an object describing the finest grain to which all values are aligned, in terms of `units` and `step` properties. These values can then be used as input to the [timeFloor](#timeFloor) or [utcFloor](#utcFloor) methods. If the optional _utc_ flag is true, alignment is assessed in Coordinated Universal Time (UTC), otherwise the local timezone is used.
79
+
74
80
  ### Local Time Utilities
75
81
 
76
82
  <a name="timeFloor" href="#timeFloor">#</a>
@@ -1,5 +1,5 @@
1
1
  import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';
2
- import { timeDay, timeWeek, utcDay, utcWeek, timeMonth, utcMonth, timeMillisecond, timeSecond, timeMinute, timeHour, timeYear, utcMillisecond, utcSecond, utcMinute, utcHour, utcYear } from 'd3-time';
2
+ import { timeDay, utcDay, utcWeek, timeWeek, timeMonth, utcMonth, timeMillisecond, timeSecond, timeMinute, timeHour, timeYear, utcMillisecond, utcSecond, utcMinute, utcHour, utcYear } from 'd3-time';
3
3
  import { bisector, tickStep } from 'd3-array';
4
4
 
5
5
  const YEAR = 'year';
@@ -303,5 +303,99 @@ function bin (opt) {
303
303
  };
304
304
  }
305
305
 
306
- export { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };
306
+ // Adapted from the time-grain-detector package by Paul Rosenzweig (ISC license).
307
+ const localGetters = {
308
+ [YEAR]: d => d.getFullYear(),
309
+ [MONTH]: d => d.getMonth(),
310
+ [DATE]: d => d.getDate(),
311
+ [DAY]: d => d.getDay(),
312
+ [HOURS]: d => d.getHours(),
313
+ [MINUTES]: d => d.getMinutes(),
314
+ [SECONDS]: d => d.getSeconds(),
315
+ [MILLISECONDS]: d => d.getMilliseconds()
316
+ };
317
+ const utcGetters = {
318
+ [YEAR]: d => d.getUTCFullYear(),
319
+ [MONTH]: d => d.getUTCMonth(),
320
+ [DATE]: d => d.getUTCDate(),
321
+ [DAY]: d => d.getUTCDay(),
322
+ [HOURS]: d => d.getUTCHours(),
323
+ [MINUTES]: d => d.getUTCMinutes(),
324
+ [SECONDS]: d => d.getUTCSeconds(),
325
+ [MILLISECONDS]: d => d.getUTCMilliseconds()
326
+ };
327
+ const grains = [{
328
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],
329
+ step: 1,
330
+ aligned: () => true
331
+ }, {
332
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS],
333
+ step: 1,
334
+ aligned: (dates, g) => dates.every(d => g[MILLISECONDS](d) === 0)
335
+ }, {
336
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
337
+ step: 1,
338
+ aligned: (dates, g) => dates.every(d => g[SECONDS](d) === 0)
339
+ }, {
340
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
341
+ step: 5,
342
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 5 === 0)
343
+ }, {
344
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
345
+ step: 10,
346
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 10 === 0)
347
+ }, {
348
+ units: [YEAR, MONTH, DATE, HOURS],
349
+ step: 1,
350
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) === 0)
351
+ }, {
352
+ units: [YEAR, MONTH, DATE],
353
+ step: 1,
354
+ aligned: (dates, g) => dates.every(d => g[HOURS](d) === 0)
355
+ }, {
356
+ units: [YEAR, WEEK],
357
+ step: 1,
358
+ skippable: true,
359
+ aligned: (dates, g) => new Set(dates.map(d => g[DAY](d))).size === 1
360
+ }, {
361
+ units: [YEAR, MONTH],
362
+ step: 1,
363
+ aligned: (dates, g) => dates.every(d => g[DATE](d) === 1)
364
+ }, {
365
+ units: [YEAR, MONTH],
366
+ step: 3,
367
+ aligned: (dates, g) => dates.every(d => g[MONTH](d) % 3 === 0)
368
+ }, {
369
+ units: [YEAR],
370
+ step: 1,
371
+ aligned: (dates, g) => dates.every(d => g[MONTH](d) === 0)
372
+ }, {
373
+ units: [YEAR],
374
+ step: 10,
375
+ aligned: (dates, g) => dates.every(d => g[YEAR](d) % 10 === 0)
376
+ }, {
377
+ aligned: () => false
378
+ }];
379
+ function detectTimeUnits(data, field, utc) {
380
+ const getters = utc ? utcGetters : localGetters;
381
+ const dates = data.map(t => {
382
+ const v = field(t),
383
+ d = new Date(v);
384
+ if (Number.isNaN(+d)) error(`Invalid date: ${v}`);
385
+ return d;
386
+ });
387
+ const mismatch = grains.findIndex(g => !g.aligned(dates, getters)),
388
+ required = grains.findIndex(g => !g.skippable && !g.aligned(dates, getters)),
389
+ index = required > mismatch + 1 ? required : mismatch;
390
+ const {
391
+ units,
392
+ step
393
+ } = grains[index - 1];
394
+ return {
395
+ units,
396
+ step
397
+ };
398
+ }
399
+
400
+ export { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, detectTimeUnits, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };
307
401
  //# sourceMappingURL=vega-time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vega-time.js","sources":["../src/units.js","../src/util.js","../src/floor.js","../src/interval.js","../src/bin.js"],"sourcesContent":["import {array, error, extend, hasOwnProperty} from 'vega-util';\n\nexport const YEAR = 'year';\nexport const QUARTER = 'quarter';\nexport const MONTH = 'month';\nexport const WEEK = 'week';\nexport const DATE = 'date';\nexport const DAY = 'day';\nexport const DAYOFYEAR = 'dayofyear';\nexport const HOURS = 'hours';\nexport const MINUTES = 'minutes';\nexport const SECONDS = 'seconds';\nexport const MILLISECONDS = 'milliseconds';\n\nexport const TIME_UNITS = [\n YEAR,\n QUARTER,\n MONTH,\n WEEK,\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MINUTES,\n SECONDS,\n MILLISECONDS\n];\n\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\n\nexport function timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n\n const numTypes = (\n (m[WEEK] || m[DAY] ? 1 : 0) +\n (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) +\n (m[DAYOFYEAR] ? 1 : 0)\n );\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n\n return u;\n}\n\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\n\nexport function timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n\n let fmt = '', start = 0, end, key;\n\n for (start=0; start<n; ) {\n for (end=u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n","import {timeDay, timeWeek, utcDay, utcWeek} from 'd3-time';\n\nconst t0 = new Date;\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nexport function dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\n\nexport function week(d) {\n return localWeekNum(new Date(d));\n}\n\nexport function localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localFirst(y) {\n return localYear(y).getDay();\n}\n\nexport function localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\n\nexport function utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\n\nexport function utcweek(d) {\n return utcWeekNum(new Date(d));\n}\n\nexport function utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\n\nexport function utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\n\nexport function utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\n\nexport function utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units.js';\nimport {\n localDate, localDayOfYear, localFirst, localWeekNum,\n utcDate, utcDayOfYear, utcFirst, utcWeekNum\n} from './util.js';\nimport {constant, one, peek, toSet, zero} from 'vega-util';\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date,\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH)\n : u[QUARTER] ? _(QUARTER)\n : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY)\n : u[WEEK] ? _(WEEK, 1)\n : u[DAY] ? _(DAY, 1)\n : u[DATE] ? _(DATE, 1)\n : u[DAYOFYEAR] ? _(DAYOFYEAR, 1)\n : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n\n return function(v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f\n : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step)\n : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\n\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\n\nexport function timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\n\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\n\nexport function utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units.js';\n\nimport {\n timeDay,\n timeHour,\n timeMillisecond,\n timeMinute,\n timeMonth,\n timeSecond,\n timeWeek,\n timeYear,\n utcDay,\n utcHour,\n utcMillisecond,\n utcMinute,\n utcMonth,\n utcSecond,\n utcWeek,\n utcYear\n} from 'd3-time';\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\n\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\n\nexport function timeInterval(unit) {\n return timeIntervals[unit];\n}\n\nexport function utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nexport function timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\n\nexport function utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nexport function timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\n\nexport function utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n","import {DATE, HOURS, MILLISECONDS, MINUTES, MONTH, SECONDS, WEEK, YEAR} from './units.js';\nimport {span} from 'vega-util';\nimport {bisector, tickStep} from 'd3-array';\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\n\nconst intervals = [\n [Seconds, 1, durationSecond],\n [Seconds, 5, 5 * durationSecond],\n [Seconds, 15, 15 * durationSecond],\n [Seconds, 30, 30 * durationSecond],\n [Minutes, 1, durationMinute],\n [Minutes, 5, 5 * durationMinute],\n [Minutes, 15, 15 * durationMinute],\n [Minutes, 30, 30 * durationMinute],\n [ Hours, 1, durationHour ],\n [ Hours, 3, 3 * durationHour ],\n [ Hours, 6, 6 * durationHour ],\n [ Hours, 12, 12 * durationHour ],\n [ Day, 1, durationDay ],\n [ Week, 1, durationWeek ],\n [ Month, 1, durationMonth ],\n [ Month, 3, 3 * durationMonth ],\n [ Year, 1, durationYear ]\n];\n\nexport default function(opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n\n let i = bisector(i => i[2]).right(intervals, target),\n units, step;\n\n if (i === intervals.length) {\n units = Year,\n step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {units, step};\n}\n"],"names":["YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","reduce","o","u","i","timeUnits","units","array","slice","m","length","error","forEach","unit","hasOwnProperty","numTypes","sort","a","b","defaultSpecifiers","timeUnitSpecifier","specifiers","s","extend","n","fmt","start","end","key","join","trim","t0","Date","localYear","y","setFullYear","setMonth","setDate","setHours","dayofyear","d","localDayOfYear","week","localWeekNum","timeDay","count","getFullYear","timeWeek","localFirst","getDay","localDate","H","M","S","L","date","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","getUTCFullYear","utcDay","utcWeek","utcFirst","setTime","getUTCDay","utcDate","setUTCFullYear","floor","step","get","inv","newDate","peek","_","p","getUnit","t","toSet","constant","zero","one","v","year","f","phase","Math","weekday","day","firstDay","localGet","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","localInv","q","w","timeFloor","utcGet","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","every","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcYear","utcMonth","utcHour","utcMinute","utcSecond","utcMillisecond","timeInterval","utcInterval","offset","ival","undefined","timeOffset","utcOffset","sequence","stop","range","timeSequence","utcSequence","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Week","Month","Year","intervals","opt","ext","extent","max","maxbins","target","abs","span","bisector","right","tickStep"],"mappings":"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"}
1
+ {"version":3,"file":"vega-time.js","sources":["../src/units.js","../src/util.js","../src/floor.js","../src/interval.js","../src/bin.js","../src/detectTimeUnits.js"],"sourcesContent":["import {array, error, extend, hasOwnProperty} from 'vega-util';\n\nexport const YEAR = 'year';\nexport const QUARTER = 'quarter';\nexport const MONTH = 'month';\nexport const WEEK = 'week';\nexport const DATE = 'date';\nexport const DAY = 'day';\nexport const DAYOFYEAR = 'dayofyear';\nexport const HOURS = 'hours';\nexport const MINUTES = 'minutes';\nexport const SECONDS = 'seconds';\nexport const MILLISECONDS = 'milliseconds';\n\nexport const TIME_UNITS = [\n YEAR,\n QUARTER,\n MONTH,\n WEEK,\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MINUTES,\n SECONDS,\n MILLISECONDS\n];\n\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\n\nexport function timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n\n const numTypes = (\n (m[WEEK] || m[DAY] ? 1 : 0) +\n (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) +\n (m[DAYOFYEAR] ? 1 : 0)\n );\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n\n return u;\n}\n\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\n\nexport function timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n\n let fmt = '', start = 0, end, key;\n\n for (start=0; start<n; ) {\n for (end=u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n","import {timeDay, timeWeek, utcDay, utcWeek} from 'd3-time';\n\nconst t0 = new Date;\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nexport function dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\n\nexport function week(d) {\n return localWeekNum(new Date(d));\n}\n\nexport function localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localFirst(y) {\n return localYear(y).getDay();\n}\n\nexport function localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\n\nexport function utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\n\nexport function utcweek(d) {\n return utcWeekNum(new Date(d));\n}\n\nexport function utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\n\nexport function utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\n\nexport function utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\n\nexport function utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units.js';\nimport {\n localDate, localDayOfYear, localFirst, localWeekNum,\n utcDate, utcDayOfYear, utcFirst, utcWeekNum\n} from './util.js';\nimport {constant, one, peek, toSet, zero} from 'vega-util';\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date,\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH)\n : u[QUARTER] ? _(QUARTER)\n : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY)\n : u[WEEK] ? _(WEEK, 1)\n : u[DAY] ? _(DAY, 1)\n : u[DATE] ? _(DATE, 1)\n : u[DAYOFYEAR] ? _(DAYOFYEAR, 1)\n : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n\n return function(v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f\n : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step)\n : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\n\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\n\nexport function timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\n\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\n\nexport function utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units.js';\n\nimport {\n timeDay,\n timeHour,\n timeMillisecond,\n timeMinute,\n timeMonth,\n timeSecond,\n timeWeek,\n timeYear,\n utcDay,\n utcHour,\n utcMillisecond,\n utcMinute,\n utcMonth,\n utcSecond,\n utcWeek,\n utcYear\n} from 'd3-time';\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\n\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\n\nexport function timeInterval(unit) {\n return timeIntervals[unit];\n}\n\nexport function utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nexport function timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\n\nexport function utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nexport function timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\n\nexport function utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n","import {DATE, HOURS, MILLISECONDS, MINUTES, MONTH, SECONDS, WEEK, YEAR} from './units.js';\nimport {span} from 'vega-util';\nimport {bisector, tickStep} from 'd3-array';\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\n\nconst intervals = [\n [Seconds, 1, durationSecond],\n [Seconds, 5, 5 * durationSecond],\n [Seconds, 15, 15 * durationSecond],\n [Seconds, 30, 30 * durationSecond],\n [Minutes, 1, durationMinute],\n [Minutes, 5, 5 * durationMinute],\n [Minutes, 15, 15 * durationMinute],\n [Minutes, 30, 30 * durationMinute],\n [ Hours, 1, durationHour ],\n [ Hours, 3, 3 * durationHour ],\n [ Hours, 6, 6 * durationHour ],\n [ Hours, 12, 12 * durationHour ],\n [ Day, 1, durationDay ],\n [ Week, 1, durationWeek ],\n [ Month, 1, durationMonth ],\n [ Month, 3, 3 * durationMonth ],\n [ Year, 1, durationYear ]\n];\n\nexport default function(opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n\n let i = bisector(i => i[2]).right(intervals, target),\n units, step;\n\n if (i === intervals.length) {\n units = Year,\n step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {units, step};\n}\n","// Adapted from the time-grain-detector package by Paul Rosenzweig (ISC license).\nimport {\n DATE,\n DAY,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n SECONDS,\n WEEK,\n YEAR\n} from './units.js';\nimport {error} from 'vega-util';\n\nconst localGetters = {\n [YEAR]: d => d.getFullYear(),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [DAY]: d => d.getDay(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds()\n};\n\nconst utcGetters = {\n [YEAR]: d => d.getUTCFullYear(),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [DAY]: d => d.getUTCDay(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds()\n};\n\nconst grains = [\n {\n units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n step: 1,\n aligned: () => true\n },\n {\n units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[MILLISECONDS](d) === 0)\n },\n {\n units: [YEAR, MONTH, DATE, HOURS, MINUTES],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[SECONDS](d) === 0)\n },\n {\n units: [YEAR, MONTH, DATE, HOURS, MINUTES],\n step: 5,\n aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 5 === 0)\n },\n {\n units: [YEAR, MONTH, DATE, HOURS, MINUTES],\n step: 10,\n aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 10 === 0)\n },\n {\n units: [YEAR, MONTH, DATE, HOURS],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[MINUTES](d) === 0)\n },\n {\n units: [YEAR, MONTH, DATE],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[HOURS](d) === 0)\n },\n {\n units: [YEAR, WEEK],\n step: 1,\n skippable: true,\n aligned: (dates, g) => new Set(dates.map(d => g[DAY](d))).size === 1\n },\n {\n units: [YEAR, MONTH],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[DATE](d) === 1)\n },\n {\n units: [YEAR, MONTH],\n step: 3,\n aligned: (dates, g) => dates.every(d => g[MONTH](d) % 3 === 0)\n },\n {\n units: [YEAR],\n step: 1,\n aligned: (dates, g) => dates.every(d => g[MONTH](d) === 0)\n },\n {\n units: [YEAR],\n step: 10,\n aligned: (dates, g) => dates.every(d => g[YEAR](d) % 10 === 0)\n },\n {\n aligned: () => false\n }\n];\n\nexport default function detectTimeUnits(data, field, utc) {\n const getters = utc ? utcGetters : localGetters;\n\n const dates = data.map(t => {\n const v = field(t), d = new Date(v);\n if (Number.isNaN(+d)) error(`Invalid date: ${v}`);\n return d;\n });\n\n const mismatch = grains.findIndex(g => !g.aligned(dates, getters)),\n required = grains.findIndex(g => !g.skippable && !g.aligned(dates, getters)),\n index = required > mismatch + 1 ? required : mismatch;\n\n const {units, step} = grains[index - 1];\n return {units, step};\n}\n"],"names":["YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","reduce","o","u","i","timeUnits","units","array","slice","m","length","error","forEach","unit","hasOwnProperty","numTypes","sort","a","b","defaultSpecifiers","timeUnitSpecifier","specifiers","s","extend","n","fmt","start","end","key","join","trim","t0","Date","localYear","y","setFullYear","setMonth","setDate","setHours","dayofyear","d","localDayOfYear","week","localWeekNum","timeDay","count","getFullYear","timeWeek","localFirst","getDay","localDate","H","M","S","L","date","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","getUTCFullYear","utcDay","utcWeek","utcFirst","setTime","getUTCDay","utcDate","setUTCFullYear","floor","step","get","inv","newDate","peek","_","p","getUnit","t","toSet","constant","zero","one","v","year","f","phase","Math","weekday","day","firstDay","localGet","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","localInv","q","w","timeFloor","utcGet","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","every","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcYear","utcMonth","utcHour","utcMinute","utcSecond","utcMillisecond","timeInterval","utcInterval","offset","ival","undefined","timeOffset","utcOffset","sequence","stop","range","timeSequence","utcSequence","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Week","Month","Year","intervals","opt","ext","extent","max","maxbins","target","abs","span","bisector","right","tickStep","localGetters","utcGetters","grains","aligned","dates","g","skippable","Set","map","size","detectTimeUnits","data","field","utc","getters","Number","isNaN","mismatch","findIndex","required","index"],"mappings":"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"}
package/index.js CHANGED
@@ -39,3 +39,7 @@ export {
39
39
  export {
40
40
  default as timeBin
41
41
  } from './src/bin.js';
42
+
43
+ export {
44
+ default as detectTimeUnits
45
+ } from './src/detectTimeUnits.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vega-time",
3
- "version": "3.1.0",
3
+ "version": "3.2.1",
4
4
  "description": "JavaScript date/time utilities for Vega.",
5
5
  "keywords": [
6
6
  "vega",
@@ -21,6 +21,10 @@
21
21
  "type": "git",
22
22
  "url": "git+https://github.com/vega/vega.git"
23
23
  },
24
+ "homepage": "https://github.com/vega/vega/tree/main/packages/vega-time#readme",
25
+ "bugs": {
26
+ "url": "https://github.com/vega/vega/issues"
27
+ },
24
28
  "scripts": {
25
29
  "prebuild": "del-cli build",
26
30
  "build": "rollup -c rollup.config.js",
@@ -33,5 +37,5 @@
33
37
  "d3-time": "^3.1.0",
34
38
  "vega-util": "^2.1.0"
35
39
  },
36
- "gitHead": "4dea72921d25bf6ff6636a9f9cb6c63ff696932c"
40
+ "gitHead": "c42b7bad10730383c780f7769768b8b64bc0052a"
37
41
  }
@@ -0,0 +1,119 @@
1
+ // Adapted from the time-grain-detector package by Paul Rosenzweig (ISC license).
2
+ import {
3
+ DATE,
4
+ DAY,
5
+ HOURS,
6
+ MILLISECONDS,
7
+ MINUTES,
8
+ MONTH,
9
+ SECONDS,
10
+ WEEK,
11
+ YEAR
12
+ } from './units.js';
13
+ import {error} from 'vega-util';
14
+
15
+ const localGetters = {
16
+ [YEAR]: d => d.getFullYear(),
17
+ [MONTH]: d => d.getMonth(),
18
+ [DATE]: d => d.getDate(),
19
+ [DAY]: d => d.getDay(),
20
+ [HOURS]: d => d.getHours(),
21
+ [MINUTES]: d => d.getMinutes(),
22
+ [SECONDS]: d => d.getSeconds(),
23
+ [MILLISECONDS]: d => d.getMilliseconds()
24
+ };
25
+
26
+ const utcGetters = {
27
+ [YEAR]: d => d.getUTCFullYear(),
28
+ [MONTH]: d => d.getUTCMonth(),
29
+ [DATE]: d => d.getUTCDate(),
30
+ [DAY]: d => d.getUTCDay(),
31
+ [HOURS]: d => d.getUTCHours(),
32
+ [MINUTES]: d => d.getUTCMinutes(),
33
+ [SECONDS]: d => d.getUTCSeconds(),
34
+ [MILLISECONDS]: d => d.getUTCMilliseconds()
35
+ };
36
+
37
+ const grains = [
38
+ {
39
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],
40
+ step: 1,
41
+ aligned: () => true
42
+ },
43
+ {
44
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS],
45
+ step: 1,
46
+ aligned: (dates, g) => dates.every(d => g[MILLISECONDS](d) === 0)
47
+ },
48
+ {
49
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
50
+ step: 1,
51
+ aligned: (dates, g) => dates.every(d => g[SECONDS](d) === 0)
52
+ },
53
+ {
54
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
55
+ step: 5,
56
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 5 === 0)
57
+ },
58
+ {
59
+ units: [YEAR, MONTH, DATE, HOURS, MINUTES],
60
+ step: 10,
61
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) % 10 === 0)
62
+ },
63
+ {
64
+ units: [YEAR, MONTH, DATE, HOURS],
65
+ step: 1,
66
+ aligned: (dates, g) => dates.every(d => g[MINUTES](d) === 0)
67
+ },
68
+ {
69
+ units: [YEAR, MONTH, DATE],
70
+ step: 1,
71
+ aligned: (dates, g) => dates.every(d => g[HOURS](d) === 0)
72
+ },
73
+ {
74
+ units: [YEAR, WEEK],
75
+ step: 1,
76
+ skippable: true,
77
+ aligned: (dates, g) => new Set(dates.map(d => g[DAY](d))).size === 1
78
+ },
79
+ {
80
+ units: [YEAR, MONTH],
81
+ step: 1,
82
+ aligned: (dates, g) => dates.every(d => g[DATE](d) === 1)
83
+ },
84
+ {
85
+ units: [YEAR, MONTH],
86
+ step: 3,
87
+ aligned: (dates, g) => dates.every(d => g[MONTH](d) % 3 === 0)
88
+ },
89
+ {
90
+ units: [YEAR],
91
+ step: 1,
92
+ aligned: (dates, g) => dates.every(d => g[MONTH](d) === 0)
93
+ },
94
+ {
95
+ units: [YEAR],
96
+ step: 10,
97
+ aligned: (dates, g) => dates.every(d => g[YEAR](d) % 10 === 0)
98
+ },
99
+ {
100
+ aligned: () => false
101
+ }
102
+ ];
103
+
104
+ export default function detectTimeUnits(data, field, utc) {
105
+ const getters = utc ? utcGetters : localGetters;
106
+
107
+ const dates = data.map(t => {
108
+ const v = field(t), d = new Date(v);
109
+ if (Number.isNaN(+d)) error(`Invalid date: ${v}`);
110
+ return d;
111
+ });
112
+
113
+ const mismatch = grains.findIndex(g => !g.aligned(dates, getters)),
114
+ required = grains.findIndex(g => !g.skippable && !g.aligned(dates, getters)),
115
+ index = required > mismatch + 1 ? required : mismatch;
116
+
117
+ const {units, step} = grains[index - 1];
118
+ return {units, step};
119
+ }