@@ -33,11 +33,14 @@ export default class Duration {
33
33
`"${ durationString } " is an invalid duration string`
34
34
)
35
35
36
+ // Milliseconds
37
+ durationArray [ 8 ] = Number ( '0.' + durationArray [ 8 ] ) * 1000
38
+
36
39
durationFragments . forEach ( ( fragment , index ) => {
37
40
let value = Number ( durationArray [ index + 1 ] )
38
41
39
42
if ( typeof value === 'number' && ! Number . isNaN ( value ) ) {
40
- this [ fragment ] = value
43
+ this [ '_' + fragment ] = value
41
44
}
42
45
} )
43
46
}
@@ -126,29 +129,30 @@ export default class Duration {
126
129
get string ( ) {
127
130
return durationFragments
128
131
. reduce (
129
- ( string , fragment ) => {
130
- if ( this [ fragment ] == null ) {
132
+ ( string , fragment , fragmentIndex ) => {
133
+ if ( typeof this [ fragment ] !== 'number' ||
134
+ Number . isNaN ( this [ fragment ] )
135
+ ) {
131
136
return string
132
137
}
133
138
134
- if ( fragment === 'minutes' && ! string . includes ( 't' ) ) {
135
- string += 't'
139
+ // fragmentIndex > 3 means smaller than day
140
+ if ( ! string . includes ( 'T' ) && fragmentIndex > 3 ) {
141
+ string += 'T'
136
142
}
137
143
138
- string += this [ fragment ] + fragment . substr ( 0 , 1 )
139
-
140
- if ( fragment === 'days' ) {
141
- string += 't'
142
- }
143
144
if ( fragment === 'milliseconds' ) {
144
- string . replace ( 's' , '.' + this [ fragment ] + 's' )
145
+ string = string
146
+ . replace ( / s $ / , `.${ this . milliseconds } S` )
147
+ }
148
+ else {
149
+ string += this [ fragment ] + fragment . substr ( 0 , 1 )
145
150
}
146
151
147
152
return string
148
153
} ,
149
154
'p'
150
155
)
151
- . replace ( / t $ / , '' )
152
156
. toUpperCase ( )
153
157
}
154
158
toString ( ) { return this . string }
0 commit comments