#33879: timesince - wrong results for 11 months + several weeks
-------------------------------+--------------------------------------
Reporter: אורי | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 4.0
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Description changed by אורי:
Old description:
> Hi,
>
> I'm using `timesince` to format how much time passed since the user last
> visited my website. The code is:
>
> {{{
> _("On {date} ({timesince} ago)").format(
> date=formats.date_format(value=last_visit_date),
> timesince=timesince(d=last_visit_date, now=today)
> )
> }}}
>
> Now I created a test to test these times, and I noticed that for a year
> minus a week, the result is "(11\u00A0months, 4\u00A0weeks ago)" (why the
> "\u00A0" and not a space?), and for a year minus 2 weeks, the result is
> "(11\u00A0months, 3\u00A0weeks ago)":
>
> {{{
> user_18 = ActiveUserFactory()
> user_18.profile.last_visit -= (relativedelta(years=1) -
> relativedelta(weeks=1))
> user_18.save_user_and_profile()
> self.assertIs(expr1={'en': "(11\u00A0months, 4\u00A0weeks
> ago)", 'he': "(לפני 11\u00A0חודשים, 4\u00A0שבועות)"}[self.language_code]
> in user_18.profile.last_visit_str, expr2=True)
> user_19 = ActiveUserFactory()
> user_19.profile.last_visit -= (relativedelta(years=1) -
> relativedelta(weeks=2))
> user_19.save_user_and_profile()
> self.assertIs(expr1={'en': "(11\u00A0months, 3\u00A0weeks
> ago)", 'he': "(לפני 11\u00A0חודשים, 3\u00A0שבועות)"}[self.language_code]
> in user_19.profile.last_visit_str, expr2=True)
> }}}
>
> Now, a year is 365 days, a year minus one week is 358 days, which is 11
> months and 3 weeks. I think the problem is because each month is
> considered as 30 days, so 11 months are 330 days. But 11 months are about
> 334 days actually, so we receive a result of 11 months and 4 weeks,
> instead of 11 months and 3 weeks.
>
> A fix would be to change the number of days in a month to 30.4 (the
> average), optionally only for more than 2 months (because it makes sense
> to calculate exactly 30 days for the first 2 months).
New description:
Hi,
I'm using `timesince` to format how much time passed since the user last
visited my website. The code is:
{{{
_("On {date} ({timesince} ago)").format(
date=formats.date_format(value=last_visit_date),
timesince=timesince(d=last_visit_date, now=today)
)
}}}
Now I created a test to test these times, and I noticed that for a year
minus a week, the result is "(11\u00A0months, 4\u00A0weeks ago)" (why the
"\u00A0" and not a space?), and for a year minus 2 weeks, the result is
"(11\u00A0months, 3\u00A0weeks ago)":
{{{
user_18 = ActiveUserFactory()
user_18.profile.last_visit -= (relativedelta(years=1) -
relativedelta(weeks=1))
user_18.save_user_and_profile()
self.assertIs(expr1={'en': "(11\u00A0months, 4\u00A0weeks
ago)", 'he': "(לפני 11\u00A0חודשים, 4\u00A0שבועות)"}[self.language_code]
in user_18.profile.last_visit_str, expr2=True)
user_19 = ActiveUserFactory()
user_19.profile.last_visit -= (relativedelta(years=1) -
relativedelta(weeks=2))
user_19.save_user_and_profile()
self.assertIs(expr1={'en': "(11\u00A0months, 3\u00A0weeks
ago)", 'he': "(לפני 11\u00A0חודשים, 3\u00A0שבועות)"}[self.language_code]
in user_19.profile.last_visit_str, expr2=True)
}}}
Now, a year is 365 days, a year minus one week is 358 days, which is 11
months and 3 weeks. I think the problem is because each month is
considered as 30 days, so 11 months are 330 days. But 11 months are about
334 days actually, so we receive a result of 11 months and 4 weeks,
instead of 11 months and 3 weeks.
A fix would be to change the number of days in a month to 30.4 (the
average), optionally only for more than 2 months (because it makes sense
to calculate exactly 30 days for the first 2 months).
Also, it's important to calculate the number of days in 11 (or any number)
of months as an integer, so that the result will not display hours and
minutes (if `depth` is big enough).
--
--
Ticket URL: <https://code.djangoproject.com/ticket/33879#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/010701825500279c-e049dd2a-a625-4ae4-b2a2-48767b3de80b-000000%40eu-central-1.amazonses.com.