|
import { daysToMonths, monthsToDays } from './bubble'; |
|
import { normalizeUnits } from '../units/aliases'; |
|
import toInt from '../utils/to-int'; |
|
|
|
export function as (units) { |
|
if (!this.isValid()) { |
|
return NaN; |
|
} |
|
var days; |
|
var months; |
|
var milliseconds = this._milliseconds; |
|
|
|
units = normalizeUnits(units); |
|
|
|
if (units === 'month' || units === 'year') { |
|
days = this._days + milliseconds / 864e5; |
|
months = this._months + daysToMonths(days); |
|
return units === 'month' ? months : months / 12; |
|
} else { |
|
|
|
days = this._days + Math.round(monthsToDays(this._months)); |
|
switch (units) { |
|
case 'week' : return days / 7 + milliseconds / 6048e5; |
|
case 'day' : return days + milliseconds / 864e5; |
|
case 'hour' : return days * 24 + milliseconds / 36e5; |
|
case 'minute' : return days * 1440 + milliseconds / 6e4; |
|
case 'second' : return days * 86400 + milliseconds / 1000; |
|
|
|
case 'millisecond': return Math.floor(days * 864e5) + milliseconds; |
|
default: throw new Error('Unknown unit ' + units); |
|
} |
|
} |
|
} |
|
|
|
|
|
export function valueOf () { |
|
if (!this.isValid()) { |
|
return NaN; |
|
} |
|
return ( |
|
this._milliseconds + |
|
this._days * 864e5 + |
|
(this._months % 12) * 2592e6 + |
|
toInt(this._months / 12) * 31536e6 |
|
); |
|
} |
|
|
|
function makeAs (alias) { |
|
return function () { |
|
return this.as(alias); |
|
}; |
|
} |
|
|
|
export var asMilliseconds = makeAs('ms'); |
|
export var asSeconds = makeAs('s'); |
|
export var asMinutes = makeAs('m'); |
|
export var asHours = makeAs('h'); |
|
export var asDays = makeAs('d'); |
|
export var asWeeks = makeAs('w'); |
|
export var asMonths = makeAs('M'); |
|
export var asYears = makeAs('y'); |
|
|