PHP's mktime in TypeScript

How to use

Install via yarn add locutus and import: import { mktime } from 'locutus/php/datetime/mktime'.

Or with CommonJS: const { mktime } = require('locutus/php/datetime/mktime')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1mktime(14, 10, 2, 2, 1, 2008)1201875002
2mktime(0, 0, 0, 0, 1, 2008)1196467200
3var $make = mktime() var $td = new Date() var $real = Math.floor($td.getTime() / 1000) var $diff = ($real - $make) $diff < 5true
4mktime(0, 0, 0, 13, 1, 1997)883612800
5mktime(0, 0, 0, 1, 1, 1998)883612800
6mktime(0, 0, 0, 1, 1, 98)883612800
7mktime(23, 59, 59, 13, 0, 2010)1293839999
8mktime(0, 0, -1, 1, 1, 1970)-1

Notes

  • The return values of the following examples are received only if your system’s timezone is UTC.

Here's what our current TypeScript equivalent to PHP's mktime looks like.

export function mktime(
hour?: number | string,
minute?: number | string,
second?: number | string,
month?: number | string,
day?: number | string,
year?: number | string,
): number | false {
// discuss at: https://locutus.io/php/mktime/
// original by: Kevin van Zonneveld (https://kvz.io)
// improved by: baris ozdil
// improved by: Kevin van Zonneveld (https://kvz.io)
// improved by: FGFEmperor
// improved by: Brett Zamir (https://brett-zamir.me)
// input by: gabriel paderni
// input by: Yannoo
// input by: jakes
// input by: 3D-GRAF
// input by: Chris
// bugfixed by: Kevin van Zonneveld (https://kvz.io)
// bugfixed by: Kevin van Zonneveld (https://kvz.io)
// bugfixed by: Marc Palau
// bugfixed by: Brett Zamir (https://brett-zamir.me)
// revised by: Theriault (https://github.com/Theriault)
// note 1: The return values of the following examples are
// note 1: received only if your system's timezone is UTC.
// example 1: mktime(14, 10, 2, 2, 1, 2008)
// returns 1: 1201875002
// example 2: mktime(0, 0, 0, 0, 1, 2008)
// returns 2: 1196467200
// example 3: var $make = mktime()
// example 3: var $td = new Date()
// example 3: var $real = Math.floor($td.getTime() / 1000)
// example 3: var $diff = ($real - $make)
// example 3: $diff < 5
// returns 3: true
// example 4: mktime(0, 0, 0, 13, 1, 1997)
// returns 4: 883612800
// example 5: mktime(0, 0, 0, 1, 1, 1998)
// returns 5: 883612800
// example 6: mktime(0, 0, 0, 1, 1, 98)
// returns 6: 883612800
// example 7: mktime(23, 59, 59, 13, 0, 2010)
// returns 7: 1293839999
// example 8: mktime(0, 0, -1, 1, 1, 1970)
// returns 8: -1

const d = new Date()
const resolved: [number, number, number, number, number, number] = [
d.getHours(),
d.getMinutes(),
d.getSeconds(),
d.getMonth() + 1, // +1 to fix JS months.
d.getDate(),
d.getFullYear(),
]
const input: [
number | string | undefined,
number | string | undefined,
number | string | undefined,
number | string | undefined,
number | string | undefined,
number | string | undefined,
] = [hour, minute, second, month, day, year]

for (let i = 0; i < input.length; i++) {
const value = input[i]
if (typeof value !== 'undefined') {
const parsed = Number.parseInt(String(value), 10)
if (Number.isNaN(parsed)) {
return false
}
resolved[i] = parsed
}
}

// Map years 0-69 to 2000-2069 and years 70-100 to 1970-2000.
const normalizedYear =
resolved[5] + (resolved[5] >= 0 ? (resolved[5] <= 69 ? 2e3 : resolved[5] <= 100 ? 1900 : 0) : 0)

// Set year, month (-1 to fix JS months), and date.
// !This must come before the call to setHours!
d.setFullYear(normalizedYear, resolved[3] - 1, resolved[4])

// Set hours, minutes, and seconds.
d.setHours(resolved[0], resolved[1], resolved[2])

const time = d.getTime()

// Divide milliseconds by 1000 to return seconds and drop decimal.
// Add 1 second if negative or it'll be off from PHP by 1 second.
return ((time / 1e3) >> 0) - Number(time < 0)
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP datetime functions


Star