@@ -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 time:: EpochNanoseconds ,
12781280 tzdb:: FsTzdbProvider ,
@@ -1411,4 +1413,42 @@ mod tests {
14111413 assert_eq ! ( diff. microseconds( ) , 0 ) ;
14121414 assert_eq ! ( diff. nanoseconds( ) , 0 ) ;
14131415 }
1416+
1417+ // overflow-reject-throws.js
1418+ #[ test]
1419+ fn overflow_reject_throws ( ) {
1420+ // const zdt = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789).toZonedDateTime("UTC");
1421+ //
1422+ // const overflow = "reject";
1423+ // assert.throws(RangeError, () => zdt.with({ month: 29 }, { overflow }));
1424+ // assert.throws(RangeError, () => zdt.with({ day: 31 }, { overflow }));
1425+ // assert.throws(RangeError, () => zdt.with({ hour: 29 }, { overflow }));
1426+ // assert.throws(RangeError, () => zdt.with({ nanosecond: 9000 }, { overflow }));
1427+
1428+ let provider = & FsTzdbProvider :: default ( ) ;
1429+
1430+ let zdt =
1431+ ZonedDateTime :: try_new ( 217178610123456789 , Calendar :: default ( ) , TimeZone :: default ( ) )
1432+ . unwrap ( ) ;
1433+
1434+ let overflow = ArithmeticOverflow :: Reject ;
1435+
1436+ let result_2 = zdt. with (
1437+ PartialZonedDateTime {
1438+ date : PartialDate {
1439+ day : Some ( 31 ) ,
1440+ ..Default :: default ( )
1441+ } ,
1442+ time : PartialTime :: default ( ) ,
1443+ offset : None ,
1444+ timezone : None ,
1445+ } ,
1446+ None ,
1447+ None ,
1448+ Some ( overflow) ,
1449+ provider,
1450+ ) ;
1451+
1452+ assert ! ( result_2. is_err( ) ) ; // Fails
1453+ }
14141454}
0 commit comments