1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| import hasOwnProp from '../utils/has-own-prop';
| import toInt from '../utils/to-int';
| import indexOf from '../utils/index-of';
| import { createDuration } from './create';
|
| var ordering = [
| 'year',
| 'quarter',
| 'month',
| 'week',
| 'day',
| 'hour',
| 'minute',
| 'second',
| 'millisecond',
| ];
|
| export default function isDurationValid(m) {
| var key,
| unitHasDecimal = false,
| i;
| for (key in m) {
| if (
| hasOwnProp(m, key) &&
| !(
| indexOf.call(ordering, key) !== -1 &&
| (m[key] == null || !isNaN(m[key]))
| )
| ) {
| return false;
| }
| }
|
| for (i = 0; i < ordering.length; ++i) {
| if (m[ordering[i]]) {
| if (unitHasDecimal) {
| return false; // only allow non-integers for smallest unit
| }
| if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
| unitHasDecimal = true;
| }
| }
| }
|
| return true;
| }
|
| export function isValid() {
| return this._isValid;
| }
|
| export function createInvalid() {
| return createDuration(NaN);
| }
|
|