Skip to content

Inconsistent results in DifferenceISODate? #2535

@anba

Description

@anba

The current DifferenceISODate definition returns the following results. Notice that it's always "P1M".

js> var end = new Temporal.PlainDate(1970, 2, 28)
js> var start = new Temporal.PlainDate(1970, 1, 28)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P1M"
js> var start = new Temporal.PlainDate(1970, 1, 29)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P1M"
js> var start = new Temporal.PlainDate(1970, 1, 30)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P1M"
js> var start = new Temporal.PlainDate(1970, 1, 31)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P1M"

When the end date is 1970-02-27, the results are more like what I'd expect:

js> var end = new Temporal.PlainDate(1970, 2, 27)
js> var start = new Temporal.PlainDate(1970, 1, 27)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P1M"
js> var start = new Temporal.PlainDate(1970, 1, 28)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P30D"
js> var start = new Temporal.PlainDate(1970, 1, 29)
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P29D"
js> var start = new Temporal.PlainDate(1970, 1, 30) 
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P28D"
js> var start = new Temporal.PlainDate(1970, 1, 31)                         
js> start.calendar.dateUntil(start, end, {largestUnit:"months"}).toString()
"P27D"

Also compare to java.time.temporal, which doesn't always return "P1M":

jshell> import java.time.LocalDate
jshell> var end = LocalDate.of(1970, 2, 28)
end ==> 1970-02-28
jshell> var start = LocalDate.of(1970, 1, 28)
start ==> 1970-01-28
jshell> start.until(end)
$4 ==> P1M
jshell> var start = LocalDate.of(1970, 1, 29)
start ==> 1970-01-29
jshell> start.until(end)
$6 ==> P30D
jshell> var start = LocalDate.of(1970, 1, 30)
start ==> 1970-01-30
jshell> start.until(end)
$8 ==> P29D
jshell> var start = LocalDate.of(1970, 1, 31)
start ==> 1970-01-31
jshell> start.until(end)
$10 ==> P28D

Metadata

Metadata

Assignees

Labels

meeting-agendanormativeWould be a normative change to the proposalspec-textSpecification text involved

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions