DateTime API
Build your web apps using Smart UI
Working with DateTime Objects
Overview
The DateTime object represents an object that can store, display, and process date and time information. DateTime has a high precision, up to 1 yoctosecond (10-24 seconds).
To instantiate a DateTime object, the user has to include the following files to the head of the page:
- smart.element.js - the base class;
- smart.date.js - the JS file containing the class DateTime.
Initialization
A DateTime object can be instantiated by calling the DateTime class constructor with different arguments, depending on the user's preference. The available options are listed below:
-
No arguments - the current date and time are stored in the object (equivalent to the standard
new Date()
construction):const newDateTime = new Smart.Utilities.DateTime();
-
One argument 'today' - the current date and time are stored in the object (equivalent to the standard
new Date()
construction):const newDateTime = new Smart.Utilities.DateTime('today');
A second argument can optionally be passed to denote the time zone. -
One argument 'todayDate' - the current date is stored in the object (but not the current time):
const newDateTime = new Smart.Utilities.DateTime('todayDate');
A second argument can optionally be passed to denote the time zone. -
One argument of type Date - an equivalent DateTime object is created:
const newDateTime = new Smart.Utilities.DateTime(new Date(2013, 2, 1, 2, 30, 15));
A second argument can optionally be passed to denote the time zone. -
One string argument representing a date. The string should be in a format recognized by the
Date.parse()
method:const newDateTime = new Smart.Utilities.DateTime('2018-12-17T03:24:00');
A second argument can optionally be passed to denote the time zone. -
More than two arguments, each one representing a time part. These are:
- year
- month - unlike in standard Date objects, when initializing a DateTime object, 1 means January, 2 - February, 3 - March, etc.
- day
- hour (optional)
- minute (optional)
- second (optional)
- millisecond (optional)
- microsecond (optional)
- nanosecond (optional)
- picosecond (optional)
- femtosecond (optional)
- attosecond (optional)
- zeptosecond (optional)
- yoctosecond (optional)
const newDateTime = new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11);
Formatting Date and Time
The DateTime class provides a method called toString that returns a string with the stored date and time information formatted based on a format string. There are a number of built-in format strings that are listed below:
-
d - short date pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('d'); // Result is "3/12/1920"
-
D - long date pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('D'); // Result is "Friday, March 12, 1920"
-
t - short time pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('t'); // Result is "8:34 AM"
-
T - long time pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('T'); // Result is "8:34:21 AM"
-
f - long date, short time pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('f'); // Result is "Friday, March 12, 1920 8:34 AM"
-
F - long date, long time pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('F'); // Result is "Friday, March 12, 1920 8:34:21 AM"
-
M - month/day pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('M'); // Result is "March 12"
-
Y - month/year pattern
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('Y'); // Result is "1920 March"
-
FP - full precision (from year to yoctosecond)
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('FP'); // Result is "1920-03-12 08:34:21:089:019:800:002:333:018:045:011"
-
FT - full precision time (from hour to yoctosecond)
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('FT'); // Result is "08:34:21:089:019:800:002:333:018:045:011"
-
PP - processor precision (from year to picosecond)
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('PP'); // Result is "1920-03-12 08:34:21:089:019:800:002"
-
PT - processor precision time (from hour to picosecond)
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('PT'); // Result is "08:34:21:089:019:800:002"
A custom format string can also be applied. The custom format string can be constructed using the following sub-strings:
- ddd - day of the week, as a three-letter abbreviation
- dddd - day of the week, using the full name
- d - day of month, without leading zero for single-digit days
- dd - day of month, with leading zero for single-digit days
- MMM - month, as a three-letter abbreviation
- MMMM - month, using the full name
- M - month, as digits, with no leading zero for single-digit months
- MM - month, as digits, with leading zero for single-digit months
- y - year, as two digits, but with no leading zero for years less than 10
- yy - year, as two digits, with leading zero for years less than 10
- yyyy - year represented by four full digits
- h - hours with no leading zero for single-digit hours, using 12-hour clock
- hh - hours with leading zero for single-digit hours, using 12-hour clock
- H - hours with no leading zero for single-digit hours, using 24-hour clock
- HH - hours with leading zero for single-digit hours, using 24-hour clock
- m - minutes with no leading zero for single-digit minutes
- mm - minutes with leading zero for single-digit minutes
- s - seconds with no leading zero for single-digit seconds
- ss - seconds with leading zero for single-digit seconds
- t - one character am/pm indicator ('a' or 'p')
- tt - multicharacter am/pm indicator
- f - deciseconds
- ff - centiseconds
- fff - milliseconds
- u - microseconds with no leading zero for single-digit microseconds.
- uu - microseconds with leading zero for single-digit microseconds.
- n - nanoseconds with no leading zero for single-digit nanoseconds.
- nn - nanoseconds with leading zero for single-digit nanoseconds.
- p - picoseconds with no leading zero for single-digit picoseconds.
- pp - picoseconds with leading zero for single-digit picoseconds.
- e - femtoseconds with no leading zero for single-digit femtoseconds.
- ee - femtoseconds with leading zero for single-digit femtoseconds.
- a - attoseconds with no leading zero for single-digit attoseconds.
- aa - attoseconds with leading zero for single-digit attoseconds.
- x - zeptoseconds with no leading zero for single-digit zeptoseconds.
- xx - zeptoseconds with leading zero for single-digit zeptoseconds.
- o - yoctoseconds with no leading zero for single-digit yoctoseconds.
- oo - yoctoseconds with leading zero for single-digit yoctoseconds.
- z - time zone offset, no leading zero
- zz - time zone offset with leading zero
- zzz - time zone offset with leading zero
Here is an example of applying custom format strings:
new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('dd-MMM-yy HH:mm:ss.fff'); // Result is "12-Mar-20 08:34:21.089" new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11).toString('dddd-MMMM-yyyy'); // Result is "Friday-March-1920"
Methods
Along with toString, the DateTime class provides the following methods:
Formatting Methods
- toDateString - equivalent to the standard Date method of the same name. Returns the date portion of a DateTime object in human readable form in American English.
- toLocaleDateString - equivalent to the standard Date method of the same name. Returns a string with a language sensitive representation of the date portion of the date.
- toLocaleString - equivalent to the standard Date method of the same name. Returns a string with a language sensitive representation of the date.
- toLocaleTimeString - equivalent to the standard Date method of the same name. Returns a string with a language sensitive representation of the time portion of the date.
To set the locale required for these methods, set the calendar.locale field of the DateTime object.
const newDateTime = new Smart.Utilities.DateTime(2013, 3, 1, 2, 30, 15); newDateTime.calendar.locale = 'de'; newDateTime.toDateString(); // Result is "Fri Mar 01 2013" newDateTime.toLocaleDateString(); // Result is "1.3.2013" newDateTime.toLocaleString(); // Result is "1.3.2013, 02:30:15" newDateTime.toLocaleTimeString(); // Result is "02:30:15"
Methods for Getting Time Parts
The following methods can be used to get the value of a particular time part of the DateTime object:
- year
- month
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond
- picosecond
- femtosecond
- attosecond
- zeptosecond
- yoctosecond
const newDateTime = new Smart.Utilities.DateTime(1920, 3, 12, 8, 34, 21, 89, 19, 800, 2, 333, 18, 45, 11); const years = newDateTime.year(); // years is "1920" const hours = newDateTime.hour(); // hours is "8" const microseconds = newDateTime.microsecond(); // microseconds is "19" const yoctoseconds = newDateTime.yoctosecond(); // yoctoseconds is "11"
Methods for Incrementing/Decrementing Time Parts
The following methods can be used to increment/decrement the value of a time part of the DateTime object:
- addYears(value, createNew)
- addMonths(value, createNew)
- addDays(value, createNew)
- addHours(value, createNew)
- addMinutes(value, createNew)
- addSeconds(value, createNew)
- addDeciseconds(value, createNew)
- addCentiseconds(value, createNew)
- addMilliseconds(value, createNew)
- addMicroseconds(value, createNew)
- addNanoseconds(value, createNew)
- addPicoseconds(value, createNew)
- addFemtoseconds(value, createNew)
- addAttoseconds(value, createNew)
- addZeptoseconds(value, createNew)
- addYoctoseconds(value, createNew)
The value parameter denotes the amount to increment (if positive) or decrement (if negative) the time part with. The createNew parameter determines if the DateTime object will be modified or a new one will be returned.
const newDateTime = new Smart.Utilities.DateTime(2013, 3, 1, 2, 30, 15); const years = newDateTime.year(); // years is "1920" const hours = newDateTime.hour(); // hours is "8" const microseconds = newDateTime.microsecond(); // microseconds is "19" const yoctoseconds = newDateTime.yoctosecond(); // yoctoseconds is "11"
Other Methods
There are several additional methods part of the DateTime object:
- clone - clones a DateTime object.
- clearTime - returns a new DateTime object with the same date, but with hour-yoctosecond time parts set to 0.
- compare - compares two DateTime objects. Returns 1 if the first date is later than the second one, -1 if the second date is later than the first one, and 0 if dates are equal. All time parts (year-yoctosecond) are compared by this method.
- toDate - returns an equivalent JavaScript Date object. Retains precision up to milliseconds. An optional parameter denoting a time zone can be passed.
const newDateTime = new Smart.Utilities.DateTime(2013, 3, 1, 2, 30, 15); const secondDateTime = newDateTime.clone(); // secondDateTime represents "3/1/2013, 2:30:15 AM" const thirdDateTime = newDateTime.clearTime(); // secondDateTime represents "3/1/2013, 12:00:00 AM" const comparison1 = newDateTime.compare(secondDateTime); // secondDateTime is 0 const comparison2 = newDateTime.compare(thirdDateTime); // secondDateTime is 1 const date = newDateTime.toDate(); // secondDateTime represents "3/1/2013, 2:30:15 AM"