79dbdc770ccd24f4f356ac324665da675af27052a042f47357efebf3a8b01d59c81bc20822feef76692ab0b89cb153f9330c6e0cfd0e58af9b993d9031c781 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { daysToMonths, monthsToDays } from './bubble';
  2. import { normalizeUnits } from '../units/aliases';
  3. import toInt from '../utils/to-int';
  4. export function as (units) {
  5. var days;
  6. var months;
  7. var milliseconds = this._milliseconds;
  8. units = normalizeUnits(units);
  9. if (units === 'month' || units === 'year') {
  10. days = this._days + milliseconds / 864e5;
  11. months = this._months + daysToMonths(days);
  12. return units === 'month' ? months : months / 12;
  13. } else {
  14. // handle milliseconds separately because of floating point math errors (issue #1867)
  15. days = this._days + Math.round(monthsToDays(this._months));
  16. switch (units) {
  17. case 'week' : return days / 7 + milliseconds / 6048e5;
  18. case 'day' : return days + milliseconds / 864e5;
  19. case 'hour' : return days * 24 + milliseconds / 36e5;
  20. case 'minute' : return days * 1440 + milliseconds / 6e4;
  21. case 'second' : return days * 86400 + milliseconds / 1000;
  22. // Math.floor prevents floating point math errors here
  23. case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
  24. default: throw new Error('Unknown unit ' + units);
  25. }
  26. }
  27. }
  28. // TODO: Use this.as('ms')?
  29. export function valueOf () {
  30. return (
  31. this._milliseconds +
  32. this._days * 864e5 +
  33. (this._months % 12) * 2592e6 +
  34. toInt(this._months / 12) * 31536e6
  35. );
  36. }
  37. function makeAs (alias) {
  38. return function () {
  39. return this.as(alias);
  40. };
  41. }
  42. export var asMilliseconds = makeAs('ms');
  43. export var asSeconds = makeAs('s');
  44. export var asMinutes = makeAs('m');
  45. export var asHours = makeAs('h');
  46. export var asDays = makeAs('d');
  47. export var asWeeks = makeAs('w');
  48. export var asMonths = makeAs('M');
  49. export var asYears = makeAs('y');