day()#

relationalai.std.dates
#day(date: date|datetime|Producer, tz: str|Producer = "UTC") -> Expression

Extracts the day component from a date or UTC datetime value. If tz is specified, then date is converted from UTC to the specified timezone before extracting the day. tz is ignored if date is a Python date or datetime object. If any of the arguments are Producer objects, then day() also acts as a filter and removes invalid values from the producer. Must be called in a rule or query context.

Parameters#

NameTypeDescription
dateProducer or Python date or datetime objectThe date or datetime value from which to extract the day.
tzProducer or Python str objectOptional timezone string (e.g., "America/New_York"), offset string (e.g., "+0600"), or Python tzinfo object. Refer to the timezone database for a list of valid timezone identifiers. Ignored if date is a Python date or datetime object. (Default: "UTC").

Returns#

An Expression object.

Raises#

TypeError if the date parameter is not a Producer object or Python date or datetime object.

Example#

Use day() to extract the day component from date and datetime values:

#import relationalai as rai
from relationalai.std import alias, dates


# =====
# SETUP
# =====

model = rai.Model("MyModel")
Event = model.Type("Event")

with model.rule():
    Event.add(id=1).set(time=dates.datetime(2021, 1, 1, 1, 30))
    Event.add(id=2).set(time="invalid")


# =======
# EXAMPLE
# =======

with model.rule():
    event = Event()
    # day() filters out any events with invalid time values, so the
    # following only sets the day property for Event 1.
    event.set(day=dates.day(event.time))
    # Since Event 2 is filtered out above, the following only sets the
    # has_valid_time property for Event 1.
    event.set(has_valid_time=True)

with model.query() as select:
    event = Event()
    response = select(event.id, event.time, event.day, event.has_valid_time)

print(response.results)
#    id                 time  month has_valid_time
# 0   1  2021-01-01 01:30:00    1.0           True
# 1   2              invalid    NaN            NaN

If the date parameter is a datetime and the tz parameter is specified, the datetime is converted from UTC to the specified timezone before computing the weekday:

#with model.query() as select:
    event = Event()
    day1 = dates.day(event.time, tz="America/New_York")
    day2 = dates.day(event.time, tz="+0600")
    response = select(event.id, event.time, alias(day1, "day1"), alias(day2, "day2"))

print(response.results)
#
with model.query() as select:
    event = Event()
    month1 = dates.month(event.time, tz="America/New_York")
    month2 = dates.month(event.time, tz="+0600")
    response = select(event.id, event.time, alias(month1, "month1"), alias(month2, "month2"))

print(response.results)
#    id                time  month1  month2
# 0   1 2021-01-01 01:30:00      12       1

See Also#