UNPKG

2.31 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = differenceInDays;
7
8var _index = _interopRequireDefault(require("../toDate/index.js"));
9
10var _index2 = _interopRequireDefault(require("../differenceInCalendarDays/index.js"));
11
12var _index3 = _interopRequireDefault(require("../compareAsc/index.js"));
13
14var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
15
16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18/**
19 * @name differenceInDays
20 * @category Day Helpers
21 * @summary Get the number of full days between the given dates.
22 *
23 * @description
24 * Get the number of full day periods between the given dates.
25 *
26 * ### v2.0.0 breaking changes:
27 *
28 * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
29 *
30 * @param {Date|Number} dateLeft - the later date
31 * @param {Date|Number} dateRight - the earlier date
32 * @returns {Number} the number of full days
33 * @throws {TypeError} 2 arguments required
34 *
35 * @example
36 * // How many full days are between
37 * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
38 * var result = differenceInDays(
39 * new Date(2012, 6, 2, 0, 0),
40 * new Date(2011, 6, 2, 23, 0)
41 * )
42 * //=> 365
43 * // How many days are between
44 * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
45 * var result = differenceInDays(
46 * new Date(2011, 6, 3, 0, 1),
47 * new Date(2011, 6, 2, 23, 59)
48 * )
49 * //=> 0
50 */
51function differenceInDays(dirtyDateLeft, dirtyDateRight) {
52 (0, _index4.default)(2, arguments);
53 var dateLeft = (0, _index.default)(dirtyDateLeft);
54 var dateRight = (0, _index.default)(dirtyDateRight);
55 var sign = (0, _index3.default)(dateLeft, dateRight);
56 var difference = Math.abs((0, _index2.default)(dateLeft, dateRight));
57 dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full
58 // If so, result must be decreased by 1 in absolute value
59
60 var isLastDayNotFull = (0, _index3.default)(dateLeft, dateRight) === -sign;
61 var result = sign * (difference - isLastDayNotFull); // Prevent negative zero
62
63 return result === 0 ? 0 : result;
64}
65
66module.exports = exports.default;
\No newline at end of file