Пример #1
0
    def test_formats_other_years(self):
        testdate = datetime.strptime("1984/10/10", "%Y/%m/%d")

        expected = "October 10th, 1984"
        self.assertEquals(fuzzydate(testdate), expected)
Пример #2
0
    def test_formats_current_year(self):
        now = datetime.now()
        testdate = datetime.strptime("%s/10/10" % now.year, "%Y/%m/%d")

        expected = "October 10th"
        self.assertEquals(fuzzydate(testdate, 1), expected)
Пример #3
0
 def test_returns_tomorrow(self):
     tomorrow = datetime.now() + timedelta(hours=24)
     self.assertEquals(fuzzydate(tomorrow), "tomorrow")
Пример #4
0
 def test_returns_today(self):
     today = datetime.now()
     self.assertEquals(fuzzydate(today), "today")
Пример #5
0
    def test_returns_yesterday(self):
        yesterday = datetime.now() - timedelta(hours=24)
        self.assertEquals(fuzzydate(yesterday), "yesterday")

        two_days_ago = datetime.now() - timedelta(hours=48)
        self.assertNotEquals(fuzzydate(two_days_ago), "yesterday")
Пример #6
0
def super_fuzzydate(value):
    try:
        value = date(value.year, value.month, value.day)
    except AttributeError:
        # Passed value wasn't a date object
        return value
    except ValueError:
        # Date arguments out of range
        return value

    # today
    today = date.today()
    delta = value - today

    # get the easy values out of the way
    if delta.days == 0:
        return u"Today"
    elif delta.days == -1:
        return u"Yesterday"
    elif delta.days == 1:
        return u"Tomorrow"

    # if we're in the future...
    if value > today:
        end_of_week = today + timedelta(days=7 - today.isoweekday())
        if value <= end_of_week:
            # return the name of the day (Wednesday)
            return u'this %s' % template.defaultfilters.date(value, "l")

        end_of_next_week = end_of_week + timedelta(weeks=1)
        if value <= end_of_next_week:
            # return the name of the day(Next Wednesday)
            return u"next %s" % template.defaultfilters.date(value, "l")

        end_of_month = today + timedelta(calendar.monthrange(today.year, today.month)[1] - today.day)
        if value <= end_of_month:
            # return the number of weeks (in two weeks)
            if value <= end_of_next_week + timedelta(weeks=1):
                return u"in two weeks"
            elif value <= end_of_next_week + timedelta(weeks=2):
                return u"in three weeks"
            elif value <= end_of_next_week + timedelta(weeks=3):
                return u"in four weeks"
            elif value <= end_of_next_week + timedelta(weeks=4):
                return u"in five weeks"

        if today.month == 12:
            next_month = 1
        else:
            next_month = today.month + 1

        end_of_next_month = date(today.year, next_month, calendar.monthrange(today.year, today.month)[1])
        if value <= end_of_next_month:
            # if we're in next month
            return u'next month'

        # the last day of the year
        end_of_year = date(today.year, 12, 31)
        if value <= end_of_year:
            # return the month name (March)
            return template.defaultfilters.date(value, "F")

        # the last day of next year
        end_of_next_year = date(today.year + 1, 12, 31)
        if value <= end_of_next_year:
            return u'next %s' % template.defaultfilters.date(value, "F")

        return template.defaultfilters.date(value, "Y")
    else:
        # TODO add the past
        return fuzzydate(value)