@@ -529,7 +529,7 @@ impl ZonedDateTime {
529529 // 23. Let dateTimeResult be ? InterpretTemporalDateTimeFields(calendar, fields, overflow).
530530 let result_date = self . calendar . date_from_partial (
531531 & partial. date . with_fallback_zoneddatetime ( self , provider) ?,
532- ArithmeticOverflow :: Constrain ,
532+ overflow ,
533533 ) ?;
534534
535535 let original_iso = self . tz . get_iso_datetime_for ( & self . instant , provider) ?. time ;
@@ -1272,7 +1272,9 @@ pub(crate) fn nanoseconds_to_formattable_offset_minutes(
12721272mod tests {
12731273 use super :: ZonedDateTime ;
12741274 use crate :: {
1275- options:: { DifferenceSettings , Disambiguation , OffsetDisambiguation , Unit } ,
1275+ options:: {
1276+ ArithmeticOverflow , DifferenceSettings , Disambiguation , OffsetDisambiguation , Unit ,
1277+ } ,
12761278 partial:: { PartialDate , PartialTime , PartialZonedDateTime } ,
12771279 primitive:: FiniteF64 ,
12781280 time:: EpochNanoseconds ,
@@ -1413,4 +1415,42 @@ mod tests {
14131415 assert_eq ! ( diff. microseconds( ) , zero) ;
14141416 assert_eq ! ( diff. nanoseconds( ) , zero) ;
14151417 }
1418+
1419+ // overflow-reject-throws.js
1420+ #[ test]
1421+ fn overflow_reject_throws ( ) {
1422+ // const zdt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789).toZonedDateTime("UTC");
1423+ //
1424+ // const overflow = "reject";
1425+ // assert.throws(RangeError, () => zdt.with({ month: 29 }, { overflow }));
1426+ // assert.throws(RangeError, () => zdt.with({ day: 31 }, { overflow }));
1427+ // assert.throws(RangeError, () => zdt.with({ hour: 29 }, { overflow }));
1428+ // assert.throws(RangeError, () => zdt.with({ nanosecond: 9000 }, { overflow }));
1429+
1430+ let provider = & FsTzdbProvider :: default ( ) ;
1431+
1432+ let zdt =
1433+ ZonedDateTime :: try_new ( 217178610123456789 , Calendar :: default ( ) , TimeZone :: default ( ) )
1434+ . unwrap ( ) ;
1435+
1436+ let overflow = ArithmeticOverflow :: Reject ;
1437+
1438+ let result_2 = zdt. with (
1439+ PartialZonedDateTime {
1440+ date : PartialDate {
1441+ day : Some ( 31 ) ,
1442+ ..Default :: default ( )
1443+ } ,
1444+ time : PartialTime :: default ( ) ,
1445+ offset : None ,
1446+ timezone : None ,
1447+ } ,
1448+ None ,
1449+ None ,
1450+ Some ( overflow) ,
1451+ provider,
1452+ ) ;
1453+
1454+ assert ! ( result_2. is_err( ) ) ; // Fails
1455+ }
14161456}
0 commit comments