# BokkyPooBahsDateTimeLibrary.sol

View Source: [contracts/libraries/BokkyPooBahsDateTimeLibrary.sol](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/contracts/libraries/BokkyPooBahsDateTimeLibrary.sol)

**BokkyPooBahsDateTimeLibrary**

## Contract Members

**Constants & Variables**

```javascript
uint256 internal constant SECONDS_PER_DAY;
uint256 internal constant SECONDS_PER_HOUR;
uint256 internal constant SECONDS_PER_MINUTE;
int256 internal constant OFFSET19700101;
uint256 internal constant DOW_MON;
uint256 internal constant DOW_TUE;
uint256 internal constant DOW_WED;
uint256 internal constant DOW_THU;
uint256 internal constant DOW_FRI;
uint256 internal constant DOW_SAT;
uint256 internal constant DOW_SUN;
```

## Functions

* [\_daysFromDate(uint256 year, uint256 month, uint256 day)](/polymath/api/bokkypoobahsdatetimelibrary.md#_daysfromdate)
* [\_daysToDate(uint256 \_days)](/polymath/api/bokkypoobahsdatetimelibrary.md#_daystodate)
* [timestampFromDate(uint256 year, uint256 month, uint256 day)](/polymath/api/bokkypoobahsdatetimelibrary.md#timestampfromdate)
* [timestampFromDateTime(uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second)](/polymath/api/bokkypoobahsdatetimelibrary.md#timestampfromdatetime)
* [timestampToDate(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#timestamptodate)
* [timestampToDateTime(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#timestamptodatetime)
* [isValidDate(uint256 year, uint256 month, uint256 day)](/polymath/api/bokkypoobahsdatetimelibrary.md#isvaliddate)
* [isValidDateTime(uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second)](/polymath/api/bokkypoobahsdatetimelibrary.md#isvaliddatetime)
* [isLeapYear(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#isleapyear)
* [\_isLeapYear(uint256 year)](/polymath/api/bokkypoobahsdatetimelibrary.md#_isleapyear)
* [isWeekDay(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#isweekday)
* [isWeekEnd(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#isweekend)
* [getDaysInMonth(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getdaysinmonth)
* [\_getDaysInMonth(uint256 year, uint256 month)](/polymath/api/bokkypoobahsdatetimelibrary.md#_getdaysinmonth)
* [getDayOfWeek(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getdayofweek)
* [getYear(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getyear)
* [getMonth(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getmonth)
* [getDay(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getday)
* [getHour(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#gethour)
* [getMinute(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getminute)
* [getSecond(uint256 timestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#getsecond)
* [addYears(uint256 timestamp, uint256 \_years)](/polymath/api/bokkypoobahsdatetimelibrary.md#addyears)
* [addMonths(uint256 timestamp, uint256 \_months)](/polymath/api/bokkypoobahsdatetimelibrary.md#addmonths)
* [addDays(uint256 timestamp, uint256 \_days)](/polymath/api/bokkypoobahsdatetimelibrary.md#adddays)
* [addHours(uint256 timestamp, uint256 \_hours)](/polymath/api/bokkypoobahsdatetimelibrary.md#addhours)
* [addMinutes(uint256 timestamp, uint256 \_minutes)](/polymath/api/bokkypoobahsdatetimelibrary.md#addminutes)
* [addSeconds(uint256 timestamp, uint256 \_seconds)](/polymath/api/bokkypoobahsdatetimelibrary.md#addseconds)
* [subYears(uint256 timestamp, uint256 \_years)](/polymath/api/bokkypoobahsdatetimelibrary.md#subyears)
* [subMonths(uint256 timestamp, uint256 \_months)](/polymath/api/bokkypoobahsdatetimelibrary.md#submonths)
* [subDays(uint256 timestamp, uint256 \_days)](/polymath/api/bokkypoobahsdatetimelibrary.md#subdays)
* [subHours(uint256 timestamp, uint256 \_hours)](/polymath/api/bokkypoobahsdatetimelibrary.md#subhours)
* [subMinutes(uint256 timestamp, uint256 \_minutes)](/polymath/api/bokkypoobahsdatetimelibrary.md#subminutes)
* [subSeconds(uint256 timestamp, uint256 \_seconds)](/polymath/api/bokkypoobahsdatetimelibrary.md#subseconds)
* [diffYears(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffyears)
* [diffMonths(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffmonths)
* [diffDays(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffdays)
* [diffHours(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffhours)
* [diffMinutes(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffminutes)
* [diffSeconds(uint256 fromTimestamp, uint256 toTimestamp)](/polymath/api/bokkypoobahsdatetimelibrary.md#diffseconds)

### \_daysFromDate

```javascript
function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure
returns(_days uint256)
```

**Arguments**

| Name  | Type    | Description |
| ----- | ------- | ----------- |
| year  | uint256 |             |
| month | uint256 |             |
| day   | uint256 |             |

### \_daysToDate

```javascript
function _daysToDate(uint256 _days) internal pure
returns(year uint256, month uint256, day uint256)
```

**Arguments**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| \_days | uint256 |             |

### timestampFromDate

```javascript
function timestampFromDate(uint256 year, uint256 month, uint256 day) internal pure
returns(timestamp uint256)
```

**Arguments**

| Name  | Type    | Description |
| ----- | ------- | ----------- |
| year  | uint256 |             |
| month | uint256 |             |
| day   | uint256 |             |

### timestampFromDateTime

```javascript
function timestampFromDateTime(uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second) internal pure
returns(timestamp uint256)
```

**Arguments**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| year   | uint256 |             |
| month  | uint256 |             |
| day    | uint256 |             |
| hour   | uint256 |             |
| minute | uint256 |             |
| second | uint256 |             |

### timestampToDate

```javascript
function timestampToDate(uint256 timestamp) internal pure
returns(year uint256, month uint256, day uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### timestampToDateTime

```javascript
function timestampToDateTime(uint256 timestamp) internal pure
returns(year uint256, month uint256, day uint256, hour uint256, minute uint256, second uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### isValidDate

```javascript
function isValidDate(uint256 year, uint256 month, uint256 day) internal pure
returns(valid bool)
```

**Arguments**

| Name  | Type    | Description |
| ----- | ------- | ----------- |
| year  | uint256 |             |
| month | uint256 |             |
| day   | uint256 |             |

### isValidDateTime

```javascript
function isValidDateTime(uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second) internal pure
returns(valid bool)
```

**Arguments**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| year   | uint256 |             |
| month  | uint256 |             |
| day    | uint256 |             |
| hour   | uint256 |             |
| minute | uint256 |             |
| second | uint256 |             |

### isLeapYear

```javascript
function isLeapYear(uint256 timestamp) internal pure
returns(leapYear bool)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### \_isLeapYear

```javascript
function _isLeapYear(uint256 year) internal pure
returns(leapYear bool)
```

**Arguments**

| Name | Type    | Description |
| ---- | ------- | ----------- |
| year | uint256 |             |

### isWeekDay

```javascript
function isWeekDay(uint256 timestamp) internal pure
returns(weekDay bool)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### isWeekEnd

```javascript
function isWeekEnd(uint256 timestamp) internal pure
returns(weekEnd bool)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getDaysInMonth

```javascript
function getDaysInMonth(uint256 timestamp) internal pure
returns(daysInMonth uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### \_getDaysInMonth

```javascript
function _getDaysInMonth(uint256 year, uint256 month) internal pure
returns(daysInMonth uint256)
```

**Arguments**

| Name  | Type    | Description |
| ----- | ------- | ----------- |
| year  | uint256 |             |
| month | uint256 |             |

### getDayOfWeek

```javascript
function getDayOfWeek(uint256 timestamp) internal pure
returns(dayOfWeek uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getYear

```javascript
function getYear(uint256 timestamp) internal pure
returns(year uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getMonth

```javascript
function getMonth(uint256 timestamp) internal pure
returns(month uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getDay

```javascript
function getDay(uint256 timestamp) internal pure
returns(day uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getHour

```javascript
function getHour(uint256 timestamp) internal pure
returns(hour uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getMinute

```javascript
function getMinute(uint256 timestamp) internal pure
returns(minute uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### getSecond

```javascript
function getSecond(uint256 timestamp) internal pure
returns(second uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |

### addYears

```javascript
function addYears(uint256 timestamp, uint256 _years) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_years   | uint256 |             |

### addMonths

```javascript
function addMonths(uint256 timestamp, uint256 _months) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_months  | uint256 |             |

### addDays

```javascript
function addDays(uint256 timestamp, uint256 _days) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_days    | uint256 |             |

### addHours

```javascript
function addHours(uint256 timestamp, uint256 _hours) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_hours   | uint256 |             |

### addMinutes

```javascript
function addMinutes(uint256 timestamp, uint256 _minutes) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_minutes | uint256 |             |

### addSeconds

```javascript
function addSeconds(uint256 timestamp, uint256 _seconds) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_seconds | uint256 |             |

### subYears

```javascript
function subYears(uint256 timestamp, uint256 _years) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_years   | uint256 |             |

### subMonths

```javascript
function subMonths(uint256 timestamp, uint256 _months) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_months  | uint256 |             |

### subDays

```javascript
function subDays(uint256 timestamp, uint256 _days) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_days    | uint256 |             |

### subHours

```javascript
function subHours(uint256 timestamp, uint256 _hours) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_hours   | uint256 |             |

### subMinutes

```javascript
function subMinutes(uint256 timestamp, uint256 _minutes) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_minutes | uint256 |             |

### subSeconds

```javascript
function subSeconds(uint256 timestamp, uint256 _seconds) internal pure
returns(newTimestamp uint256)
```

**Arguments**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 |             |
| \_seconds | uint256 |             |

### diffYears

```javascript
function diffYears(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_years uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |

### diffMonths

```javascript
function diffMonths(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_months uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |

### diffDays

```javascript
function diffDays(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_days uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |

### diffHours

```javascript
function diffHours(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_hours uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |

### diffMinutes

```javascript
function diffMinutes(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_minutes uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |

### diffSeconds

```javascript
function diffSeconds(uint256 fromTimestamp, uint256 toTimestamp) internal pure
returns(_seconds uint256)
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| fromTimestamp | uint256 |             |
| toTimestamp   | uint256 |             |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.polymath.network/polymath/api/bokkypoobahsdatetimelibrary.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
