@@ -466,13 +466,49 @@ export function subtract(
466466 return new DayTimeDuration ( secondsOfDuration ) ;
467467}
468468
469- export function addDuration ( dateTime : DateTime , _duration : AbstractDuration ) : DateTime {
470- throw new Error ( `Not implemented: adding durations to ${ valueTypeToString ( dateTime . type ) } ` ) ;
469+ export function addDuration ( dateTime : DateTime , duration : AbstractDuration ) : DateTime {
470+ const jsDateTime = dateTime . toJavaScriptDate ( ) ;
471+ jsDateTime . setUTCFullYear ( jsDateTime . getUTCFullYear ( ) + duration . getYears ( ) )
472+ jsDateTime . setUTCMonth ( jsDateTime . getUTCMonth ( ) + duration . getMonths ( ) )
473+ jsDateTime . setUTCDate ( jsDateTime . getUTCDate ( ) + duration . getDays ( ) )
474+ jsDateTime . setUTCHours ( jsDateTime . getUTCHours ( ) + duration . getHours ( ) )
475+ jsDateTime . setUTCMinutes ( jsDateTime . getUTCMinutes ( ) + duration . getMinutes ( ) ) ;
476+ jsDateTime . setUTCSeconds ( jsDateTime . getUTCSeconds ( ) + Math . floor ( duration . getSeconds ( ) ) ) ;
477+ jsDateTime . setUTCMilliseconds ( jsDateTime . getUTCMilliseconds ( ) + duration . getSeconds ( ) % 1 ) ;
478+
479+ return new DateTime (
480+ jsDateTime . getUTCFullYear ( ) ,
481+ jsDateTime . getUTCMonth ( ) + 1 ,
482+ jsDateTime . getUTCDate ( ) ,
483+ jsDateTime . getUTCHours ( ) ,
484+ jsDateTime . getUTCMinutes ( ) ,
485+ jsDateTime . getUTCSeconds ( ) ,
486+ jsDateTime . getUTCMilliseconds ( ) ,
487+
488+ dateTime . getTimezone ( ) ,
489+ ) ;
471490}
472491
473- export function subtractDuration ( dateTime : DateTime , _duration : AbstractDuration ) : DateTime {
474- throw new Error (
475- `Not implemented: subtracting durations from ${ valueTypeToString ( dateTime . type ) } `
492+ export function subtractDuration ( dateTime : DateTime , duration : AbstractDuration ) : DateTime {
493+ const jsDateTime = dateTime . toJavaScriptDate ( ) ;
494+ jsDateTime . setUTCFullYear ( jsDateTime . getUTCFullYear ( ) - duration . getYears ( ) )
495+ jsDateTime . setUTCMonth ( jsDateTime . getUTCMonth ( ) - duration . getMonths ( ) )
496+ jsDateTime . setUTCDate ( jsDateTime . getUTCDate ( ) - duration . getDays ( ) )
497+ jsDateTime . setUTCHours ( jsDateTime . getUTCHours ( ) - duration . getHours ( ) )
498+ jsDateTime . setUTCMinutes ( jsDateTime . getUTCMinutes ( ) - duration . getMinutes ( ) ) ;
499+ jsDateTime . setUTCSeconds ( jsDateTime . getUTCSeconds ( ) - Math . floor ( duration . getSeconds ( ) ) ) ;
500+ jsDateTime . setUTCMilliseconds ( jsDateTime . getUTCMilliseconds ( ) - duration . getSeconds ( ) % 1 ) ;
501+
502+ return new DateTime (
503+ jsDateTime . getUTCFullYear ( ) ,
504+ jsDateTime . getUTCMonth ( ) + 1 ,
505+ jsDateTime . getUTCDate ( ) ,
506+ jsDateTime . getUTCHours ( ) ,
507+ jsDateTime . getUTCMinutes ( ) ,
508+ jsDateTime . getUTCSeconds ( ) ,
509+ jsDateTime . getUTCMilliseconds ( ) ,
510+
511+ dateTime . getTimezone ( ) ,
476512 ) ;
477513}
478514
0 commit comments