Created
April 15, 2016 03:02
-
-
Save pistatium/23dd753500b975a5b8a87ddd4641cca2 to your computer and use it in GitHub Desktop.
timeago
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import timedelta, datetime | |
from django.utils import timezone | |
from django.test import TestCase | |
from django import template | |
register = template.Library() | |
@register.filter() | |
def timeago(dt: datetime, now_dt: datetime=None) -> str: | |
if not now_dt: | |
now_dt = timezone.now() | |
diff = now_dt - dt | |
diff_days = diff.days | |
if diff > timedelta(days=365): | |
return "{}年".format(diff_days//365) | |
if diff > timedelta(days=31): | |
return "{}ヶ月".format(diff_days//31) | |
if diff > timedelta(days=7): | |
return "{}週間".format(diff_days//7) | |
diff_hours = int(diff.total_seconds()) // 60 // 60 | |
if diff > timedelta(hours=72): | |
return "{}日".format(diff_days) | |
if diff > timedelta(hours=1): | |
return "{}時間".format(diff_hours) | |
diff_minutes = int(diff.total_seconds()) // 60 | |
return "{}分".format(diff_minutes) | |
class TestTemplatetags(TestCase): | |
def test_timeago_year(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(days=366) | |
self.assertEqual(timeago(target, now), '1年') | |
target = timezone.now() - timedelta(days=800) | |
self.assertEqual(timeago(target, now), '2年') | |
def test_timeago_month(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(days=35) | |
self.assertEqual(timeago(target, now), '1ヶ月') | |
target = timezone.now() - timedelta(days=365) | |
self.assertEqual(timeago(target, now), '11ヶ月') | |
def test_timeago_week(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(days=8) | |
self.assertEqual(timeago(target, now), '1週間') | |
target = timezone.now() - timedelta(days=30) | |
self.assertEqual(timeago(target, now), '4週間') | |
def test_timeago_day(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(days=6, hours=23) | |
self.assertEqual(timeago(target, now), '6日') | |
target = timezone.now() - timedelta(days=3, hours=1) | |
self.assertEqual(timeago(target, now), '3日') | |
def test_timeago_hour(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(hours=1, minutes=1) | |
self.assertEqual(timeago(target, now), '1時間') | |
target = timezone.now() - timedelta(hours=71, minutes=1) | |
self.assertEqual(timeago(target, now), '71時間') | |
def test_timeago_minutes(self): | |
now = timezone.now() | |
target = timezone.now() - timedelta(seconds=1) | |
self.assertEqual(timeago(target, now), '0分') | |
target = timezone.now() - timedelta(minutes=1, seconds=1) | |
self.assertEqual(timeago(target, now), '1分') | |
target = timezone.now() - timedelta(minutes=59, seconds=59) | |
self.assertEqual(timeago(target, now), '59分') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment