Beispiel #1
0
 def showTimeFrame(self,obj):
     s = DateTime(obj.getValue('start-date'))
     e = DateTime(obj.getValue('end-date'))
     if s.year() == e.year() and s.month() == e.month() and \
        s.day() == e.day() and s.hour() == e.hour() and s.minute() == e.minute():
         return False
     return True
    def results(self, start, until=None):
        today = DateTime()
        today = DateTime(today.year(), today.month(), today.day())
        start = DateTime(start)
        start = DateTime(start.year(), start.month(), start.day())

        query = Indexed('chimpfeeds') & \
                In('review_state', ('published', )) & \
                Ge('feedSchedule', start)

        if until:
            try:
                until = DateTime(until)
            except DateTime.SyntaxError:
                pass
            else:
                query = query & Le('feedSchedule', until)

        site = getToolByName(self.context, "portal_url").getPortalObject()
        settings = IFeedSettings(site)
        if settings.use_moderation:
            query = query & Eq('feedModerate', True)

        catalog = getToolByName(self.context, "portal_catalog")

        extras = []
        utilities = getUtilitiesFor(IGroupExtras)
        groups = InterestGroupVocabulary()(self.context)
        for name, util in utilities:
            for group in groups:
                extras.extend(util.items(group.title, start, until))

        return list(catalog.evalAdvancedQuery(
            query, (('feedSchedule', 'desc'), ))) + extras
Beispiel #3
0
 def showTimeFrame(self, obj):
     s = DateTime(obj.getValue('start-date'))
     e = DateTime(obj.getValue('end-date'))
     if s.year() == e.year() and s.month() == e.month() and \
        s.day() == e.day() and s.hour() == e.hour() and s.minute() == e.minute():
         return False
     return True
    def getDateRangeFromDate(self, start_date, end_date=None):
        """Returns tuple of DateTime.
        Compute this tuple from dates."""

        if end_date is None:
            end_date = start_date

        start_date = DateTime(start_date.year(), start_date.month(),
                              start_date.day(), 0, 0, 0)

        # Finished at 23:59:59
        end_date = DateTime(end_date.year(), end_date.month(), end_date.day(),
                            23, 59, 59)

        return (start_date, end_date)
Beispiel #5
0
  def _getNextDay(self, date, timezone):
    if timezone is not None:
      new_date = DateTime(date.timeTime() + 86400.0, timezone)
    else:
      new_date = DateTime(date.timeTime() + 86400.0)

    # Due to daylight savings, 24 hours later does not always mean that
    # it's next day.
    while new_date.day() == date.day():
      if timezone is not None:
        new_date = DateTime(new_date.timeTime() + 3600.0, timezone)
      else:
        new_date = DateTime(new_date.timeTime() + 3600.0)
    return DateTime(new_date.year(), new_date.month(), new_date.day(),
            0, 0, 0, timezone)
    def post_validate(self, REQUEST=None, errors=None):
        """Validates start and end date

        End date must be after start date
        """
        if 'startDate' in errors or 'endDate' in errors:
            # No point in validating bad input
            return
        
        rstartDate = REQUEST.get('startDate', None)
        rendDate = REQUEST.get('endDate', None)

        if rstartDate:
            try:
                start = DateTime(rstartDate)
            except:
                errors['startDate'] = _(u'error_invalid_start_date',
                                        default=u'Start date is not valid.')

            # set end > start
            # TODO: add duration selection
            endHour = start.h_24()
            endMinute = start.minute() + config.DURATION
            while endMinute > 59:
                endHour = endHour+1
                endMinute = endMinute-60
            if endHour > 23:
                endHour = 23
                endMinute = 55
            end = DateTime(start.year(),start.month(),start.day(),endHour,endMinute)
            self.getField('endDate').set(self, end)
    def post_validate(self, REQUEST=None, errors=None):
        """Validates start and end date

        End date must be after start date
        """
        if 'startDate' in errors or 'endDate' in errors:
            # No point in validating bad input
            return

        rstartDate = REQUEST.get('startDate', None)
        rendDate = REQUEST.get('endDate', None)

        if rstartDate:
            try:
                start = DateTime(rstartDate)
            except:
                errors['startDate'] = _(u'error_invalid_start_date',
                                        default=u'Start date is not valid.')

            # set end > start
            # TODO: add duration selection
            endHour = start.h_24()
            endMinute = start.minute() + config.DURATION
            while endMinute > 59:
                endHour = endHour + 1
                endMinute = endMinute - 60
            if endHour > 23:
                endHour = 23
                endMinute = 55
            end = DateTime(start.year(), start.month(), start.day(), endHour,
                           endMinute)
            self.getField('endDate').set(self, end)
 def now_no_seconds(self):
     """ return current date and time with the seconds truncated 
     """
     now = DateTime()
     return DateTime(str(now.year())+'/'+str(now.month())+'/'+\
         str(now.day())+' '+str(now.hour())+':'+str(now.minute())+' '+\
         str(now.timezone()))
Beispiel #9
0
    def getMilestoneInfo(self, m):
        now = DateTime()
        today = DateTime(now.year(), now.month(), now.day())
        delaytime = today - m.end - 1
        delaydays = int(delaytime) + 1
        description = m.Description
        state = ''
        if m.review_state == 'active' and delaytime < 0:
            #state = '待办'
            state = translate(_(u'state_active', default='Active'),
                              context=self.request)
        elif m.review_state == 'completed':
            #state = '完成'
            state = translate(_(u'state_completed', default='Completed'),
                              context=self.request)
        else:
            #state = '滞后'
            state = translate(_(u'state_late', default='Late'),
                              context=self.request)
            #description = '(滞后' + str(delaydays) + '天)' + description
            description = translate(_(
                u'milestone_description',
                default='(Late ${delaydays} days) ${description}',
                mapping={
                    u'delaydays': str(delaydays),
                    u'description': description
                }),
                                    context=self.request)

        return (state, description)
 def testEDTTimezone(self):
     # should be able to parse EDT timezones:  see lp:599856.
     dt = DateTime("Mon, 28 Jun 2010 10:12:25 EDT")
     self.assertEqual(dt.Day(), 'Monday')
     self.assertEqual(dt.day(), 28)
     self.assertEqual(dt.Month(), 'June')
     self.assertEqual(dt.timezone(), 'GMT-4')
 def purge_now(self):
     last_purge = self.last_purge()
     now = DateTime()
     if (not last_purge) or now - last_purge > 1 or now.day() != last_purge.day():
         return True
     else:
         return False
Beispiel #12
0
    def render_view(self, field, value):
        if value is None:
            return ''

        use_ampm = field.get_value('ampm_time_style')

        if not isinstance(value, DateTime):
            value = DateTime(value)
        year = "%04d" % value.year()
        month = "%02d" % value.month()
        day = "%02d" % value.day()
        if use_ampm:
            hour = "%02d" % value.h_12()
        else:
            hour = "%02d" % value.hour()
        minute = "%02d" % value.minute()
        ampm = value.ampm()

        order = field.get_value('input_order')
        if order == 'ymd':
            output = [year, month, day]
        elif order == 'dmy':
            output = [day, month, year]
        elif order == 'mdy':
            output = [month, day, year]
        date_result = string.join(output, field.get_value('date_separator'))

        if not field.get_value('date_only'):
            time_result = hour + field.get_value('time_separator') + minute
            if use_ampm:
                time_result += '&nbsp;' + ampm
            return date_result + '&nbsp;&nbsp;&nbsp;' + time_result
        else:
            return date_result
Beispiel #13
0
        def _calculate_two_weeks():
            two_weeks = [[None] * 7, [None] * 7]

            brains = portal_catalog.searchResults(
                    {'path' : path,
                     'portal_type': 'Milestone',
                     'end': {"query": [today, today+14], "range": "minmax"},
                    },
                    )

            _upcoming = {}
            for b in brains:
                end = b.end
                end = DateTime(end.year(), end.month(), end.day())

                _upcoming.setdefault(end, []).append(b)

            day = today
            for i in range(2):
                for j in range(7):
                    two_weeks[i][j] = {}
                    two_weeks[i][j]["day"] = day.day()
                    if _upcoming.has_key(day):
                        two_weeks[i][j]["its"] = _upcoming[day]
                    day += 1
            nextday = today+1
            two_weeks[0][0]["day"] = "TODAY"
            two_weeks[0][0]["is_today"] = True
            two_weeks[0][1]["day"] = "%s %d" % (nextday.aMonth(), nextday.day())

            return two_weeks
Beispiel #14
0
 def _getNextMinute(self, date, timezone):
   if timezone is not None:
     new_date = DateTime(date.timeTime() + 60.0, timezone)
   else:
     new_date = DateTime(date.timeTime() + 60.0)
   return DateTime(new_date.year(), new_date.month(), new_date.day(),
           new_date.hour(), new_date.minute(), 0, timezone)
Beispiel #15
0
 def testEDTTimezone(self):
     """Should be able to parse EDT timezones"""
     dt = DateTime("Mon, 28 Jun 2010 10:12:25 EDT")
     self.assertEqual(dt.Day(), 'Monday')
     self.assertEqual(dt.day(), 28)
     self.assertEqual(dt.Month(), 'June')
     self.assertEqual(dt.timezone(), 'GMT-0400')
Beispiel #16
0
    def _dt_setter(self, fieldtoset, value, **kwargs):
        # Always set the date in UTC, saving the timezone in another field.
        # But since the timezone value isn't known at the time of saving the
        # form, we have to save it timezone-naive first and let
        # timezone_handler convert it to the target zone afterwards.

        # Note: The name of the first parameter shouldn't be field, because
        # it's already in kwargs in some case.

        if not isinstance(value, DateTime): value = DateTime(value)

        # Get microseconds from seconds, which is a floating value. Round it
        # up, to bypass precision errors.
        micro = int(round(value.second()%1 * 1000000))

        value = DateTime('%04d-%02d-%02dT%02d:%02d:%02d%sZ' % (
                    value.year(),
                    value.month(),
                    value.day(),
                    value.hour(),
                    value.minute(),
                    value.second(),
                    micro and '.%s' % micro or ''
                    )
                )
        self.getField(fieldtoset).set(self, value, **kwargs)
Beispiel #17
0
    def specialActivities(self):

        sactivities = []
        ftoday = DateTime()
        today = DateTime('/'.join([str(ftoday.year()), str(ftoday.month()), str(ftoday.day())]))
        start_date = today
        end_date = today + 0.9
        folderS  = getSite().unrestrictedTraverse('actividades/actividades-especiales')
        brainscuerS = {'Cuernavaca': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/cuernavaca'])}
        brainsjurS = {'Juriquilla': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/juriquilla'])}
        brainsoaxS = {'Oaxaca': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/oaxaca'])}

        for items in [brainscuerS, brainsjurS, brainsoaxS]:
            campus = items.keys()[0]
            brains = items[campus]
            for item in brains:
                data = {}
                data['startf'] = self.date_speller(item.start)
                data['date'] = item.start
                data['expositor'] = item.getSpeaker
                data['title'] = item.pretty_title_or_id()
                data['location'] = item.location
                data['hour'] = str(data['startf']['hour']) + ':' + str(data['startf']['minute'])  + ' hrs.'
                value = ''
                if item.Subject:
                    value = item.Subject[0]
                data['seminarytitle'] = value
                data['campus'] = campus
                sactivities.append(data)

        return sactivities
    def testRFC822(self):
        # rfc822 conversion
        dt = DateTime('2002-05-02T08:00:00+00:00')
        self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 +0000')

        dt = DateTime('2002-05-02T08:00:00+02:00')
        self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 +0200')

        dt = DateTime('2002-05-02T08:00:00-02:00')
        self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 -0200')

        # Checking that conversion from local time is working.
        dt = DateTime()
        dts = dt.rfc822().split(' ')
        times = dts[4].split(':')
        _isDST = time.localtime(time.time())[8]
        if _isDST:
            offset = time.altzone
        else:
            offset = time.timezone
        self.assertEqual(dts[0], dt.aDay() + ',')
        self.assertEqual(int(dts[1]), dt.day())
        self.assertEqual(dts[2], dt.aMonth())
        self.assertEqual(int(dts[3]), dt.year())
        self.assertEqual(int(times[0]), dt.h_24())
        self.assertEqual(int(times[1]), dt.minute())
        self.assertEqual(int(times[2]), int(dt.second()))
        self.assertEqual(dts[5], "%+03d%02d" % divmod((-offset / 60), 60))
Beispiel #19
0
    def tvActivities(self):
        ftoday = DateTime()
        today = DateTime('/'.join([str(ftoday.year()), str(ftoday.month()), str(ftoday.day())]))
        start_date = today
        end_date = today + 0.9
        foldercu = self.pathcu()
        brainscu = self.criteriaActivities(start_date, end_date, foldercu)

        folderjur = self.pathjur()
        brainsjur = self.criteriaActivities(start_date, end_date, folderjur)

        iso_start = start_date.ISO().split('-')
        day_start = iso_start[2].split('T')

        iso_end = end_date.ISO().split('-')
        day_end = iso_end[2].split('T')

        return {
            'brainscu': brainscu,
            'start_date': '/'.join([day_start[0], iso_start[1], iso_start[0]]),
            'end_date': '/'.join([day_end[0], iso_end[1], iso_end[0]]),
            'matcuerrss': self.semanaryRSS(self.matcuerfeed, start_date, end_date),
            'oaxrss': self.semanaryRSS(self.oaxfeed, start_date, end_date),
            'brainsjur': brainsjur,
        }
Beispiel #20
0
 def testConstructor7(self):
     """Constructor from parts"""
     dt = DateTime()
     dt1 = DateTime(dt.year(), dt.month(), dt.day(), dt.hour(), dt.minute(), dt.second(), dt.timezone())
     # Compare representations as it's the
     # only way to compare the dates to the same accuracy
     self.assertEqual(repr(dt), repr(dt1))
Beispiel #21
0
 def testSubtraction(self):
     """Reconstruction of a DateTime from its parts, with subtraction"""
     dt = DateTime()
     dt1 = dt - 3.141592653
     dt2 = DateTime(dt.year(), dt.month(), dt.day(), dt.hour(), dt.minute(), dt.second())
     dt3 = dt2 - 3.141592653
     self.assertEqual(dt1, dt3, (dt, dt1, dt2, dt3))
Beispiel #22
0
 def render_hidden(self, field, key, value, REQUEST):
     result = []
     if value is None and field.get_value('default_now'):
         value = DateTime()
     sub_values = {}
     subfields = ['year','month','day']
     if value is not None:
         if not isinstance(value, DateTime):
             value = DateTime(value)
         sub_values['year']  = '%04d' % value.year()
         sub_values['month'] = "%02d" % value.month()
         sub_values['day']   = "%02d" % value.day()
         if not field.get_value('date_only'):
             use_ampm = field.get_value('ampm_time_style')
             subfields.extend(['hour','minute'])
             if use_ampm: subfields.append('ampm')
             if value is not None:
                 if use_ampm:
                     sub_values['hour'] = "%02d" % value.h_12()
                     sub_values['ampm'] = value.ampm()
                 else:
                     sub_values['hour'] = "%02d" % value.hour()
                 sub_values['minute'] = "%02d" % value.minute()
     for subfield in subfields:
         # XXX it would be nicer to pass the hidden value somewhere
         # to the subfields, but ...
         sub_key = field.generate_subfield_key(subfield)
         sub_field = field.sub_form.get_field(subfield)
         result.append(sub_field.widget.render_hidden(sub_field,
                                 sub_key, sub_values.get(subfield), REQUEST))
     return ''.join(result)
    def getDateRangeFromWeek(self, start_week, start_year, end_week=None, end_year=None):
        """Returns tuple of DateTime. Compute this tuple from weeks. A week
        begins monday and ends sunday.
        """
        if end_week is None:
            end_week = start_week

        if end_year is None:
            end_year = start_year

        # Get first day of start year
        date_first_day = DateTime(start_year, 1, 1)
        day_minus = (date_first_day.dow() - 1) % 7
        day_plus = 0
        start_day = (start_week * 7) - 6 - day_minus
        start_date = DateTime(start_year, start_day)

        if start_date.week() != start_week:
            day_plus = 7
            start_date = start_date + day_plus

        # Get first day of end year
        date_first_day = DateTime(end_year, 1, 1)
        day_minus = (date_first_day.dow() - 1) % 7
        end_day = (end_week * 7) - day_minus + day_plus
        end_date = DateTime(end_year, end_day)

        # Finished at 23:59:59
        end_date = DateTime(end_date.year(),
                      end_date.month(),
                      end_date.day(),
                      23, 59, 59)

        return (start_date, end_date)
    def getChoices(self):
        """
        Returns the appropriate date range choices.
        """

        today = datetime.date.today()
        timedelta = datetime.timedelta

        mtd_days = today.day - 1
        ytd_days = today.timetuple().tm_yday - 1

        date_ranges = {
            'week': [today - timedelta(days=6), today],
            'month': [today - timedelta(days=29), today],
            'quarter': [today - timedelta(days=89), today],
            'year': [today - timedelta(days=364), today],
            'mdt': [today - timedelta(days=mtd_days), today],
            'ytd': [today - timedelta(days=ytd_days), today],
        }

        if hasattr(self.context, 'Date') and self.context.Date() is not 'None':
            pub_dt = DateTime(self.context.Date())
            published_date = datetime.date(
                pub_dt.year(), pub_dt.month(), pub_dt.day())
            date_ranges.update({
                'published': [published_date, today],
            })

        return date_ranges
Beispiel #25
0
    def update(self):
        catalog_tool = getToolByName(self.context, 'portal_catalog')
        portal_path = getToolByName(self.context, 'portal_url').getPortalPath()
        path = '/'.join(self.context.getPhysicalPath())

        # at portal, so we show only active projects
        if portal_path == path:
            pv = getMultiAdapter( (self.context, self.request), name=u'projectview')
            path = pv.getActiveProjectPaths()

        now = DateTime()
        self.today = DateTime(now.year(), now.month(), now.day())
        self.NameDays = []
        day = self.today
        for i in range(7):
            self.NameDays.append(day.aDay())
            day += 1

        query1 ={ 'portal_type' : 'Milestone',
                  'end'         : {"query":[self.today-1], "range":"max"},
                  'review_state': 'active',
                  'path': path,
                 }
        self.late_milestones = catalog_tool.searchResults(
                query1,
                sort_on='end',
                )

        query2 ={ 'portal_type' : 'Milestone',
                  'review_state': 'active',
                  'end'         : {"query":[self.today,
                                            self.today+14], "range":"minmax"},
                  'path': path,
                }
        brains = catalog_tool.searchResults(
                query2,
                sort_on='end',
                )

        self.next_14_days_cal = [[None] * 7, [None] * 7]
        self.next_14_days_milestones = {}
        day = self.today
        for i in range(2):
            for j in range(7):
                self.next_14_days_cal[i][j] = day.day()
                day += 1

        self.next_14_days_cal[0][0] = "TODAY"
        day = self.today + 1
        self.next_14_days_cal[0][1] = "%s %s" % (day.aMonth(), day.day())

        for b in brains:
            diff = int(b.end - self.today)
            weekno = diff / 7
            if weekno > 1:
                continue

            self.next_14_days_milestones.setdefault(weekno, {}).setdefault(diff % 7,
                    []).append(b)
 def do_email_reminder(self):
     prop = getToolByName(self.context,'portal_properties').groupfinder_properties
     bool_email = prop.getProperty('email_reminder')
     str_date = prop.getProperty('email_reminder_executed_on')
     dt = DateTime(str_date)
     if DateTime().day() != dt.day() and bool_email:
         return True
     return False
 def do_email_reminder(self):
     prop = getToolByName(self.context,
                          'portal_properties').groupfinder_properties
     bool_email = prop.getProperty('email_reminder')
     str_date = prop.getProperty('email_reminder_executed_on')
     dt = DateTime(str_date)
     if DateTime().day() != dt.day() and bool_email:
         return True
     return False
Beispiel #28
0
    def update(self):
        super(HeaderTimeViewlet, self).update()

        date = DateTime()
        self.day = date.day()
        self.month = _pl(monthname_msgid(int(date.strftime('%m'))),
            default=safe_unicode(date.Month()))
        self.dayname = _pl(weekdayname_msgid(int(date.strftime('%w'))),
            default=safe_unicode(date.DayOfWeek()))
        self.datetime = self.toLocalizedTime(date, long_format=True)
    def getDateRangeFromDate(self, start_date, end_date=None):
        """Returns tuple of DateTime.
        Compute this tuple from dates."""

        if end_date is None:
            end_date = start_date

        start_date = DateTime(start_date.year(),
                      start_date.month(),
                      start_date.day(),
                      0, 0, 0)

        # Finished at 23:59:59
        end_date = DateTime(end_date.year(),
                      end_date.month(),
                      end_date.day(),
                      23, 59, 59)

        return (start_date, end_date)
    def getAge(self):
        """age"""
        birth = self.getPersonal_birthdate()
        if birth is None:
            return ""

        now = DateTime()
        year = now.year() - birth.year()
        if now.month() < birth.month() or (now.month() == birth.month() and now.day() < birth.day()):
            year = year -1

        return str(year)+" años"
Beispiel #31
0
    def get3monthsMilestones(self):
        now = DateTime()
        start_year, start_month, today = now.year(), now.month(), now.day()

        end_year = start_year + (start_month + 3 - 1) / 12
        end_month = (start_month + 3 - 1) % 12 + 1

        start_date = DateTime(start_year, start_month, 1)
        end_date = DateTime(end_year, end_month, 1)

        ctool = getToolByName(self.context, 'portal_catalog')
        #active_projects = ctool(portal_type='Project', review_state='active')
        #paths = [p.getPath() for p in active_projects]
        pv = getMultiAdapter((self.context, self.request), name=u'projectview')
        paths = pv.getActiveProjectPaths()
        query = {
            'path': paths,
            'portal_type': 'Milestone',
            'review_state': 'active',
            'end': {
                "query": [start_date, end_date],
                "range": "minmax"
            },
        }
        responsibleParty = self.request.get('responsibleParty', '')
        if responsibleParty:
            query['getResponsibleParty'] = responsibleParty

        brains = ctool.searchResults(query)

        milestones = {}
        for b in brains:
            end = b.end
            month, day = end.month(), end.day()

            if not milestones.has_key(month):
                milestones[month] = {}
            if not milestones[month].has_key(day):
                milestones[month][day] = {'name': day, 'milestones': [b]}
            else:
                milestones[month][day]['milestones'].append(b)

        if not start_month in milestones:
            milestones[start_month] = {}
        if not today in milestones[start_month]:
            milestones[start_month][today] = {
                'name': 'TODAY',
                'milestones': []
            }
        else:
            milestones[start_month][today]['name'] = 'TODAY'

        return milestones
    def getAntiquity(self):
        """antiquity"""
        antiquit = self.getCompany_employee_startdate()
        if antiquit is None:
            return ""

        now = DateTime()
        year = now.year() - antiquit.year()
        if now.month() < antiquit.month() or (now.month() == antiquit.month() and now.day() < antiquit.day()):
            year = year -1

        return str(year)+" años"
Beispiel #33
0
  def stepCheckBasic(self, sequence = None, sequence_list = None, **kw):
    basic = sequence.get('basic')
    self.assertEqual(len(basic.report_group_list), 1)
    lane_tree_list = basic.buildLaneTreeList()
    sec_axis_info = basic.getLaneAxisInfo(lane_tree_list)
    date = DateTime()
    today = DateTime('%s/%s/%s' % (date.year(),date.month(),date.day()))
    self.assertEqual(sec_axis_info['bound_start'], today)
    self.assertEqual(sec_axis_info['bound_stop'], today+1)

    for tree_list, activity_list,stat in basic.report_group_list:
      self.assertEqual(len(activity_list), 1)
 def test_iteration_start_default(self):
     """ Test that the iteration's start date is set to
     current date by default
     """
     self.setRoles(['Projectmanager'])
     self.folder.invokeFactory('Project', id='proj')
     self.folder.proj.invokeFactory('Iteration', id='it')
     it = self.folder.proj.it
     ct = DateTime()
     self.failUnless(it.startDate.year() == ct.year())
     self.failUnless(it.startDate.month() == ct.month())
     self.failUnless(it.startDate.day() == ct.day())
Beispiel #35
0
 def getAge(self):
     """Return the age of the team member."""
     birthdate = self.context.getBirthdate()
     if birthdate is None:
         return None
     today = DateTime()
     age = today.year() - birthdate.year()
     # Apply correction when before birthday.
     if (today.month() < birthdate.month() or
         (today.month() == birthdate.month() and
         today.day() < birthdate.day())):
         age = age - 1
     return age
Beispiel #36
0
    def generate_date(self, datetimestring, now=None):
        if now is None:
            now = datetime.datetime.now()

        today = now.day
        yesterday = (now - datetime.timedelta(1)).day
        this_month = now.month
        this_year = now.year

        modified = DateTime(datetimestring)
        if modified.month() == this_month and modified.year() == this_year:
            if modified.day() == today:
                return _(u'label_today', default=u'Today, ${time}',
                         mapping={'time': modified.strftime('%H:%M')})

            elif modified.day() == yesterday:
                return _(u'label_yesterday', u'Yesterday, ${time}',
                         mapping={'time': modified.strftime('%H:%M')})
            else:
                return modified.strftime('%d.%m.%Y')
        else:
            return modified.strftime('%d.%m.%Y')