Looks like JavaScript, feels like Ruby, and it is a script language fitting in C programmers.
This project is maintained by Kray-G
DateTime Library is not an embedded library, so you should load it by using.
using DateTime;
Basically, use new to instanciate a DateTime object.
new DateTime() … 現在時刻でインスタンス化new DateTime(dateString) … 文字列をパースしてインスタンス化new DateTime(Unixtime) … UNIXエポックの時刻からインスタンス化new DateTime(year, month, day[, hour, minute, second]) … 日時情報を個別に指定してインスタンス化But you can use one of the followings as you like.
Those are the same and it returns a DateTime object created by new internally.
DateTime.parse(...)DateTime(...)You can use following formats as a dateString.
"2020-01-01", "2020-1-1""2020/01/01", "2020/1/1""2020-01-01T10:00:05", "2020-1-01T10:0:5""2020/01/01 10:00:05", "2020/1/01 10:0:5"A DateTime object has following methods.
| メソッド | 動作概要 | 
|---|---|
| isLeapYear() | true if it is a leap year. | 
| unixtime() | Returns a Unix epoch time. | 
| datetime() | Returns a JSON object. | 
| year() | Returns a year. | 
| month() | Returns a month. | 
| day() | Returns a day. | 
| hour() | Returns a hour. | 
| minute() | Returns a minute. | 
| second() | Returns a second. | 
| weekday() | Returns a week. (0: Sunday, 1: Monday, …, 6: Saturday) | 
| isSunday() | true if it is a Sunday. | 
| isMonday() | true if it is a Monday. | 
| isTuesday() | true if it is a Tuesday. | 
| isWednesday() | true if it is a Wednesday. | 
| isThursday() | true if it is a Thursday. | 
| isFriday() | true if it is a Friday. | 
| isSaturday() | true if it is a Saturday. | 
| clone() | Returns a clone object. | 
| addDay(day) | Goes forward by the number of days specified by day. (destructive) | 
| subDay(day) | Goes back by the number of days specified by day. (destructive) | 
| addMonth(month) | Goes forward by the number of months specified by month. (destructive) | 
| subMonth(month) | Goes back by the number of months specified by month. (destructive) | 
| next() | Returns a DateTime object with a next day. | 
| +(day) | Returns a DateTime object gone forward by the number of days specified by day. | 
| -(day) | Returns a DateTime object gone back by the number of days specified by day. | 
| >>(month) | Returns a DateTime object gone forward by the number of months specified by month. | 
| <<(month) | Returns a DateTime object gone back by the number of months specified by month. | 
| <=>(dt) | 0 if it is a same time, -1 if dtis a later date and time, otherwise 1. | 
| format(fmtString) | Returns a string formatted by fmtString. It supports a format string as follows.%YYYY%: Year of 4 digits,%YY%: Year of 2 digits.%MM%:Month of 2 digits,%M%: Month of 1 digit.%DD%: Day of 2 digits.,%D%: Day of 1 digit.%hh%: Hour of 2 digits,%h%: Hour of 1 digit.%mm%: Minute of 2 digits,%m%: Minute of 1 digit.%ss%: Second of 2 digits,%s%: Second of 1 digit. | 
When you move a month by the operator << or >> and there is no same date in the moved month, the date will be an end of the month.
using DateTime;
System.println(DateTime("2001-3-28") << 1);  // 2001/02/28 00:00:00
System.println(DateTime("2001-3-31") << 1);  // 2001/02/28 00:00:00
This may cause what you don’t expected.
using DateTime;
System.println(DateTime("2001-1-31") >> 2);        // 2001/03/31 00:00:00
System.println(DateTime("2001-1-31") >> 1 >> 1);   // 2001/03/28 00:00:00
System.println(DateTime("2001-1-31") >> 1 >> -1);  // 2001/01/28 00:00:00
A DateTime object can be used with Range.
using DateTime;
(DateTime(2020,1,1)..DateTime(2020,1,10))
    .each(&(d) => System.println(d));
This example will show the last date because the range operator is ...
If the range operator is ..., the last date will not be shown.
2020/01/01 00:00:00
2020/01/02 00:00:00
2020/01/03 00:00:00
2020/01/04 00:00:00
2020/01/05 00:00:00
2020/01/06 00:00:00
2020/01/07 00:00:00
2020/01/08 00:00:00
2020/01/09 00:00:00
2020/01/10 00:00:00
Of course, a Range of a Datetime object can be also used in for-in.
using DateTime;
for (var d in DateTime(2020,1,1)...DateTime(2020,1,10)) {
    System.println(d);
}
This loop do not include the last date.
2020/01/01 00:00:00
2020/01/02 00:00:00
2020/01/03 00:00:00
2020/01/04 00:00:00
2020/01/05 00:00:00
2020/01/06 00:00:00
2020/01/07 00:00:00
2020/01/08 00:00:00
2020/01/09 00:00:00
using DateTime;
function test(dt) {
    System.println(dt);
}
test(new DateTime("2020/01/01"));
test(DateTime("2020/01/01"));
test(DateTime.parse("2020/01/01"));
2020/01/01 00:00:00
2020/01/01 00:00:00
2020/01/01 00:00:00
using DateTime;
function test(dt) {
    System.println("=> ", dt);
    System.println("    isLeapYear  = ", dt.isLeapYear());
    System.println("    datetime    = ", dt.datetime());
    System.println("    year        = ", dt.year());
    System.println("    month       = ", dt.month());
    System.println("    day         = ", dt.day());
    System.println("    hour        = ", dt.hour());
    System.println("    minute      = ", dt.minute());
    System.println("    second      = ", dt.second());
    System.println("    weekday     = ", dt.weekday());
    System.println("    isSunday    = ", dt.isSunday());
    System.println("    isMonday    = ", dt.isMonday());
    System.println("    isTuesday   = ", dt.isTuesday());
    System.println("    isWednesday = ", dt.isWednesday());
    System.println("    isThursday  = ", dt.isThursday());
    System.println("    isFriday    = ", dt.isFriday());
    System.println("    isSaturday  = ", dt.isSaturday());
}
(DateTime("2020/01/01")..DateTime("2020/01/3")).each { => test(_1) };
=> 2020/01/01 00:00:00
    isLeapYear  = 1
    datetime    = {"day":1,"hour":0,"minute":0,"month":1,"second":0,"weekday":3,"year":2020}
    year        = 2020
    month       = 1
    day         = 1
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 3
    isSunday    = 0
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 1
    isThursday  = 0
    isFriday    = 0
    isSaturday  = 0
=> 2020/01/02 00:00:00
    isLeapYear  = 1
    datetime    = {"day":2,"hour":0,"minute":0,"month":1,"second":0,"weekday":4,"year":2020}
    year        = 2020
    month       = 1
    day         = 2
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 4
    isSunday    = 0
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 0
    isThursday  = 1
    isFriday    = 0
    isSaturday  = 0
=> 2020/01/03 00:00:00
    isLeapYear  = 1
    datetime    = {"day":3,"hour":0,"minute":0,"month":1,"second":0,"weekday":5,"year":2020}
    year        = 2020
    month       = 1
    day         = 3
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 5
    isSunday    = 0
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 0
    isThursday  = 0
    isFriday    = 1
    isSaturday  = 0
using DateTime;
function test(dt) {
    System.println("=> ", dt);
    System.println("    isLeapYear  = ", dt.isLeapYear());
    System.println("    datetime    = ", dt.datetime());
    System.println("    year        = ", dt.year());
    System.println("    month       = ", dt.month());
    System.println("    day         = ", dt.day());
    System.println("    hour        = ", dt.hour());
    System.println("    minute      = ", dt.minute());
    System.println("    second      = ", dt.second());
    System.println("    weekday     = ", dt.weekday());
    System.println("    isSunday    = ", dt.isSunday());
    System.println("    isMonday    = ", dt.isMonday());
    System.println("    isTuesday   = ", dt.isTuesday());
    System.println("    isWednesday = ", dt.isWednesday());
    System.println("    isThursday  = ", dt.isThursday());
    System.println("    isFriday    = ", dt.isFriday());
    System.println("    isSaturday  = ", dt.isSaturday());
}
(DateTime("2021/01/01")..DateTime("2021/01/3")).each { => test(_1) };
=> 2021/01/01 00:00:00
    isLeapYear  = 0
    datetime    = {"day":1,"hour":0,"minute":0,"month":1,"second":0,"weekday":5,"year":2021}
    year        = 2021
    month       = 1
    day         = 1
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 5
    isSunday    = 0
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 0
    isThursday  = 0
    isFriday    = 1
    isSaturday  = 0
=> 2021/01/02 00:00:00
    isLeapYear  = 0
    datetime    = {"day":2,"hour":0,"minute":0,"month":1,"second":0,"weekday":6,"year":2021}
    year        = 2021
    month       = 1
    day         = 2
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 6
    isSunday    = 0
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 0
    isThursday  = 0
    isFriday    = 0
    isSaturday  = 1
=> 2021/01/03 00:00:00
    isLeapYear  = 0
    datetime    = {"day":3,"hour":0,"minute":0,"month":1,"second":0,"weekday":0,"year":2021}
    year        = 2021
    month       = 1
    day         = 3
    hour        = 0
    minute      = 0
    second      = 0
    weekday     = 0
    isSunday    = 1
    isMonday    = 0
    isTuesday   = 0
    isWednesday = 0
    isThursday  = 0
    isFriday    = 0
    isSaturday  = 0
using DateTime;
System.println(DateTime("2001-3-28") << 1);  // 2001/02/28 00:00:00
System.println(DateTime("2001-3-31") << 1);  // 2001/02/28 00:00:00
2001/02/28 00:00:00
2001/02/28 00:00:00
using DateTime;
System.println(DateTime("2001-1-31") >> 2);        // 2001/03/31 00:00:00
System.println(DateTime("2001-1-31") >> 1 >> 1);   // 2001/03/28 00:00:00
System.println(DateTime("2001-1-31") >> 1 >> -1);  // 2001/01/28 00:00:00
2001/03/31 00:00:00
2001/03/28 00:00:00
2001/01/28 00:00:00
using DateTime;
for (var d in DateTime(2020,1,1)...DateTime(2020,1,10)) {
    System.println(d);
}
2020/01/01 00:00:00
2020/01/02 00:00:00
2020/01/03 00:00:00
2020/01/04 00:00:00
2020/01/05 00:00:00
2020/01/06 00:00:00
2020/01/07 00:00:00
2020/01/08 00:00:00
2020/01/09 00:00:00