# date_type.h File Reference

Types related to the dates in OpenTTD. More...

Go to the source code of this file.

## Data Structures
struct | YearMonthDay
| Data structure to convert between Date and triplet (year, month, and day). More...
## Defines
#define | ORIGINAL_BASE_YEAR 1920
| The minimum starting year/base year of the original TTD.
#define | ORIGINAL_END_YEAR 2051
| The original ending year.
#define | ORIGINAL_MAX_YEAR 2090
| The maximum year of the original TTD.
#define | LEAP_YEARS_TILL(year) ((year) == 0 ? 0 : ((year) - 1) / 4 - ((year) - 1) / 100 + ((year) - 1) / 400 + 1)
| Calculate the number of leap years till a given year.
#define | DAYS_TILL(year) (DAYS_IN_YEAR * (year) + LEAP_YEARS_TILL(year))
| Calculate the date of the first day of a given year.
#define | DAYS_TILL_ORIGINAL_BASE_YEAR DAYS_TILL(ORIGINAL_BASE_YEAR)
| The offset in days from the '_date == 0' till 'ConvertYMDToDate(ORIGINAL_BASE_YEAR, 0, 1)'.
#define | MIN_YEAR 0
| The absolute minimum & maximum years in OTTD.
#define | DEF_START_YEAR 1950
| The default starting year.
#define | MAX_YEAR 5000000
| MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date, about 2^31 / 366 years.
#define | MAX_DAY (DAYS_TILL(MAX_YEAR + 1) - 1)
| The number of days till the last day.
## Typedefs
typedef int32 | Date
| The type to store our dates in.
typedef uint16 | DateFract
| The fraction of a date we're in, i.e. the number of ticks since the last date changeover.
typedef int32 | Ticks
| The type to store ticks in.
typedef int32 | Year
| Type for the year, note: 0 based, i.e. starts at the year 0.
typedef uint8 | Month
| Type for the month, note: 0 based, i.e. 0 = January, 11 = December.
typedef uint8 | Day
| Type for the day of the month, note: 1 based, first day of a month is 1.
## Enumerations
enum | { DAY_TICKS = 74, DAYS_IN_YEAR = 365, DAYS_IN_LEAP_YEAR = 366 }
| 1 day is 74 ticks; _date_fract used to be uint16 and incremented by 885. More...
## Variables
static const Year | INVALID_YEAR = -1
| Representation of an invalid year.
static const Date | INVALID_DATE = -1
| Representation of an invalid date.
static const Ticks | INVALID_TICKS = -1
| Representation of an invalid number of ticks.

## Detailed Description

Types related to the dates in OpenTTD.

Definition in file date_type.h.

## Define Documentation

#define DAYS_TILL | ( | year |  | ) | (DAYS_IN_YEAR * (year) + LEAP_YEARS_TILL(year))

Calculate the date of the first day of a given year.

Parameters:

  | year | the year to get the first day of.

Returns:
  the date.

Definition at line 60 of file date_type.h.

Referenced by ConvertYMDToDate().

#define LEAP_YEARS_TILL | ( | year |  | ) | ((year) == 0 ? 0 : ((year) - 1) / 4 - ((year) - 1) / 100 + ((year) - 1) / 400 + 1)

Calculate the number of leap years till a given year.

Each passed leap year adds one day to the 'day count'.

A special case for the year 0 as no year has been passed, but '(year - 1) / 4' does not yield '-1' to counteract the '+1' at the end of the formula as divisions round to zero.

Parameters:

  | year | the year to get the leap years till.

Returns:
  the number of leap years.

Definition at line 53 of file date_type.h.

## Enumeration Type Documentation

anonymous enum

1 day is 74 ticks; _date_fract used to be uint16 and incremented by 885.

On an overflow the new day begun and 65535 / 885 = 74. 1 tick is approximately 30 ms. 1 day is thus about 2 seconds (74 * 30 = 2220) on a machine that can run OpenTTD normally

Enumerator:

  DAY_TICKS | ticks per day
  DAYS_IN_YEAR | days per year
  DAYS_IN_LEAP_YEAR | sometimes, you need one day more...

Definition at line 21 of file date_type.h.