FieldtypeDatetime

Stores a date and optionally a time

The internal value is always a Unix timestamp (int). Output formatting converts the timestamp to a string using a configurable PHP date() format.

Value type

Empty string '' when blank. When populated, value depends on whether the Page output formatting is ON or OFF:

  • int (Unix timestamp) when output formatting is OFF and non-empty value is present.

  • string (formatted date/time string) when output formatting is ON and non-empty value is present.

Getting and setting values
// Get (output formatting OFF — raw timestamp):
$page->of(false);
$page->date_field   // int (Unix timestamp) or '' when blank

// Get (output formatting ON — formatted string):
$page->of(true);
$page->date_field   // string, e.g. "8 April 2026" per dateOutputFormat setting

// Set — accepts Unix timestamp, PHP \DateTime, or strtotime-compatible string:
$page->date_field = time();
$page->date_field = strtotime('2026-04-08');
$page->date_field = '2026-04-08 14:30:00';  // strtotime-compatible string
$page->date_field = new \DateTime('2026-04-08');
$page->date_field = '';  // clear the value
$page->save('date_field');
Selectors

Comparison operators accept a Unix timestamp, a strtotime()-compatible date string, or a MySQL Y-m-d H:i:s string:

// Exact date match
$pages->find('date_field=2026-04-08');

// No value
$pages->find('date_field=""');

// Comparison
$pages->find('date_field>2026-01-01');
$pages->find('date_field<' . time());   // before now
$pages->find('date_field>=2026-01-01, date_field<=2026-12-31'); // within a year

// Not empty (has any date)
$pages->find('date_field!=""');

// Partial date string match
$pages->find('date_field^=2026');        // starts with 2026 (any date in 2026)
$pages->find('date_field^=2026-04');     // starts with 2026-04 (April 2026)
$pages->find('date_field%=2026-04-08'); // contains this date string

Note on partial matching (^=, %=): These match against the stored Y-m-d H:i:s MySQL string, not the formatted output value. Use ^=YYYY or ^=YYYY-MM for year/month-based ranges.

Output / markup
// output formatting ON (default in front-end):
echo $page->date_field;  // formatted string, e.g. "8 April 2026 2:30 pm"

// output formatting OFF:
echo date('Y-m-d', $page->date_field);  // manual formatting from timestamp

// Using WireDateTime for formatting:
echo $datetime->formatDate($page->date_field, 'j F Y');
Notes
  • The value is stored as a MySQL datetime column (Y-m-d H:i:s) and loaded as a Unix timestamp.
  • Output format is controlled by the dateOutputFormat field setting (PHP date() format string).
  • Per-language output formats are supported when LanguageSupport is installed.
  • The default output format is Y-m-d (configurable per field instance).
  • dateOutputFormat can combine date and time: e.g. 'j F Y g:i a'.
  • Compatible fieldtypes: FieldtypeDatetime only (and language variants).
  • Database column: datetime NOT NULL, indexed.
API reference: methods, hooks

For documentation about the fields used in this class, please see: wire/core/Fieldtype.php


Click any linked item for full usage details and examples. Hookable methods are indicated with the icon. In addition to those shown below, the FieldtypeDatetime class also inherits all the methods and properties of: Fieldtype, WireData and Wire.

Show class?     Show args?       Only hookable?    

Common

NameReturnSummary 
FieldtypeDatetime::convertDateFormat(string $format, string $type)
string

Given a date() format, convert it to either 'js', 'strftime' or 'regex' format

 
FieldtypeDatetime::exportValue(Page $page, Field $field, int $value)
string

Export value

FieldtypeDatetime::formatDate(int $value, string $format)
string

Format a date with the given PHP date() or PHP strftime() format

 
FieldtypeDatetime::formatValue(Page $page, Field $field, int $value)
string

Format the value for output, according to selected format and language

FieldtypeDatetime::getCompatibleFieldtypes(Field $field)
Fieldtypes

Get compatible Fieldtypes

FieldtypeDatetime::getConfigInputfields(Field $field)
InputfieldWrapper

Field configuration screen

FieldtypeDatetime::getDatabaseSchema(Field $field)
array

Return database schema used by this field

 
FieldtypeDatetime::getDateFormats()
array

Return all predefined PHP date() formats for use as dates

 
FieldtypeDatetime::getFieldClass()
string

Get the Field class to use for fields of this type

 
FieldtypeDatetime::getInputfield(Page $page, Field $field)
InputfieldDatetime

Return the Inputfield used for date/time (InputfieldDatetime)

 
FieldtypeDatetime::getMatchQuery(PageFinderDatabaseQuerySelect $query, string $table, string $subfield, string $operator, $value)
DatabaseQuerySelect

Match a date/time value in the database, as used by PageFinder

 
FieldtypeDatetime::getSelectorInfo(Field $field)
array

Get selector info

FieldtypeDatetime::getTimeFormats()
array

Return all predefined PHP date() formats for use as times

 
FieldtypeDatetime::isEmptyValue(Field $field, mixed $value)
bool

Return whether the given value is considered empty or not

 
FieldtypeDatetime::sanitizeValue(Page $page, Field $field, $value)
int

Sanitize value, per Fieldtype interface

 
FieldtypeDatetime::sleepValue(Page $page, Field $field, $value)
string

Convert value from timestamp to Y-m-d H:i:s date string

FieldtypeDatetime::stringToTimestamp(string $str, string $format)
int

Given a date/time string and expected format, convert it to a unix timestamp

 
FieldtypeDatetime::wakeupValue(Page $page, Field $field, string $value)
int

Convert value from Y-m-d H:i:s string to timestamp

For hooks

These methods are only useful for hooking and should not be called directly.

NameReturnSummary 
FieldtypeDatetime::getFieldSetups()
array

Get predefined setups for newly created fields of this type

Additional methods and properties

In addition to the methods and properties above, FieldtypeDatetime also inherits the methods and properties of these classes:

API reference based on ProcessWire core version 3.0.261