UNPKG

fictional

Version:

Generate fake data deterministically from a given input

78 lines (61 loc) 1.81 kB
var hash = require('./hash') var defaults = require('./utils/defaults') var conj = require('./utils/conj') var fit = require('./utils/fit') var MIN_YEAR = 1980 var MAX_YEAR = 2019 function dateString(input, opts) { var id = hash(input) opts = opts || 0 var minDate, maxDate // keep older dateString function for backwards compatibility if ( !opts || (opts.minYear && opts.minYear) || (opts.minYear && !opts.max) || (!opts.min && opts.maxYear) ) { return dateStringLegacy(input, opts) } if (opts.min) { minDate = new Date(opts.min) } else { var minYear = defaults(opts.minYear, MIN_YEAR) minDate = new Date(Date.UTC(minYear, 0, 1)) } if (opts.max) { maxDate = new Date(opts.max) } else { var maxYear = defaults(opts.maxYear, MAX_YEAR) maxDate = new Date(Date.UTC(maxYear, 11, 31, 23, 59, 59, 999)) } var min = minDate.getTime() var max = maxDate.getTime() var time = fit(id, min, max) return new Date(time).toISOString() } function dateStringLegacy(input, opts) { var id = hash(input) opts = opts || 0 var minYear = defaults(opts.minYear, MIN_YEAR) var maxYear = defaults(opts.maxYear, MAX_YEAR) // for simplicity, use 28d as max regardless of month/year var year = fit(id, minYear, maxYear) var monthIndex = fit(id, 0, 11) var day = fit(id, 1, 28) var hour = fit(id, 0, 23) var min = fit(id, 0, 59) var millisec = fit(id, 0, 1000) return new Date( Date.UTC(year, monthIndex, day, hour, min, millisec) ).toISOString() } dateString.options = function dateStringOptions(opts) { var base = this dateStringFn.options = dateString.options return dateStringFn function dateStringFn(input, overrides) { return base(input, conj(opts, overrides)) } } module.exports = dateString