Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feb 29th showing as 'yesterday' on March 31 #281

Open
Esbylion opened this issue Mar 31, 2024 · 5 comments · May be fixed by #285
Open

Feb 29th showing as 'yesterday' on March 31 #281

Esbylion opened this issue Mar 31, 2024 · 5 comments · May be fixed by #285

Comments

@Esbylion
Copy link

Minimal reproduction:

<html>
<body>
<relative-time datetime="2024-02-29 07:20:54.629275+00:00"></relative-time>
<script type="module" src="https://unpkg.com/@github/relative-time-element@latest/dist/bundle.js"></script>
</body>
</html>

Screenshot from 2024-03-31 at 6:03 PM, GMT +11
Screenshot from 2024-03-31 18-03-43

This appears the same on Firefox for Android, Firefox on Linux Mint, Firefox on Windows 10, and Edge on Windows 10.

@depoulo
Copy link

depoulo commented Apr 2, 2024

@sixmachine-6
Copy link

May be the library or the component handling the relative-time is not updating it correctly instead we can a create a custom script to handle the time Am i correct mam/sir?

@silverwind
Copy link

silverwind commented May 31, 2024

Bug is reproducible on GitHub today:

image

currently it's 2024-05-31T12:16:54.112Z

2024-05-01T12:32:52.000Z renders "30 days ago" which is ok
2024-05-01T05:33:40.000Z renders "now" but should be "31 days ago" or "a month ago"
2024-04-30T12:39:36.000Z renders "yesterday" but should be "32 days ago" or "a month ago"

It only happens when the current date is near the end of a month. It looks like all subsequent dates after the point where it breaks are off by 1 month.

@lilyinstarlight
Copy link

It happens because of JavaScript date math and the reliance on difference between .getMonth() calls after .setMonth() calls for relative time rounding, in this case when duration.days === 0 and duration.months === -1 and relativeTo === new Date('2024-05-31')

[I] lily@bina ~> node
Welcome to Node.js v22.2.0.
Type ".help" for more information.
> let date = new Date()
undefined
> date
2024-05-31T18:32:29.029Z
> date.getMonth()
4
> date.setMonth(3)
1714588349029
> date.getMonth()
4
> date
2024-05-01T18:32:29.029Z
>

I've got a patch cooked up to fix this anomaly by correcting "May 31 minus 1 month" to be equal to "April 30" rather than "May 1". I don't know if that is semantically what is desired by this library, but I've never touched or used this library before really so I don't know very well what would be "expected" outputs

@lilyinstarlight
Copy link

I've opened #285 to fix this behavior

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants