DateTimeLib
Gas-Efficient Solidity DateTime Library
Conventions
All dates, times and Unix timestamps are UTC.
| Unit | Range | Notes |
|---|---|---|
| timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC |
| month | 1 ... 12 | |
| day | 1 ... 31 | |
| Weekday | 0 ... 6 | 0 = Monday, ..., 6 = Sunday |
| year/month/day | 1970/01/01 ... 3.66*10^69/12/31 |
All functions operate on the uint256 timestamp data type.
Functions
daysFromDate
Calculate the number of days days from 1970/01/01 to year/month/day.
function daysFromDate(uint256 y, uint256 m, uint d) public pure returns (uint256 day)NOTE This function does not validate the year/month/day input. Use isValidDate(...) to validate the input if necessary.
daysToDate
Calculate year/month/day from the number of days days since 1970/01/01 .
function daysToDate(uint256 _days) public pure returns (uint256 year, uint256 month, uint256 day)timestampFromDate
Calculate the timestamp to year/month/day.
function timestampFromDate(uint256 year, uint256 month, uint256 day) public pure returns (uint timestamp)NOTE This function does not validate the year/month/day input. Use isValidDate(...) to validate the input if necessary.
timestampToDate
Calculate year/month/day from timestamp.
function timestampToDate(uint256 t) public pure returns (uint256 y, uint256 m, uint256 d)isValidDate
Is the date specified by year/month/day a valid date?
function isValidDate(uint256 year, uint256 month, uint256 day) internal pure returns (bool valid)getDaysInMonth
Return number of day in the month daysInMonth for the month specified by year/month.
function getDaysInMonth(uint256 y, uint256 m) internal pure returns (uint256 d)getDayOfWeek
Return the day of the week weekday (0 = Monday,1 = Tuesday ..., 6 = Sunday) for the date specified by timestamp.
function getWeekDay(uint256 t) internal pure returns (uint256 weekday) getNthDayOfWeekInMonthOfYear
Return timestamp of the Nth dayOfWeek from the year/month.
function getNthDayOfWeekInMonthOfYear(uint256 y, uint256 m, uint256 n, uint256 wd) internal pure returns (uint256 t)NOTE This function does not validate the year/month and wd input. Use isValidDate(...) to validate for year/month and wd must be in range of [0,6].
Example :
// get 3th Friday of November 2022
getNthDayOfWeekInMonthOfYear(2022,11,3,4) -> 1668729600 //18th November 2022 00:00:00 UTCgetNextWeekDay
Return timestamp of next week day from timestamp and wd.
function getNextWeekDay(uint256 t, uint256 wd) internal pure returns (uint256 _timestamp)Example :
// get next friday (current date is 6th November 2022)
getNextWeekDay(1667724375,4) -> 1668124800 //11th November 2022 00:00:00 UTCSafety
This is experimental software and is provided on an "as is" and "as available" basis.
We do not give any warranties and will not be liable for any loss incurred through any use of this codebase.
Installation
To install with Foundry:
forge install Atarpara/DateTimeLibTo install with Hardhat or Truffle:
npm installAcknowledgements
This repository is inspired by or directly modified from many sources, primarily:
References
A copy of the webpage with the algorithm Date Time Algorithm.