-
-
Save Torkiwi/8aa18a0ea3e603d746648e7f48115d57 to your computer and use it in GitHub Desktop.
Replicate PHP's native date() formatting in JavaScript for many common format types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Return a formated string from a date Object mimicking PHP's date() functionality | |
* | |
* @param {string} format "Y-m-d H:i:s" or similar PHP-style date format string | |
* @param {* | null} date Date Object, Datestring, or milliseconds | |
* | |
*/ | |
function date(format, date) { | |
if (!date || date === "") { | |
date = new Date(); | |
} else if (typeof date !== 'object') { | |
// attempt to convert string/number to date object | |
try { | |
if (typeof date === 'number') date = new Date(date); | |
else date = new Date(date.replace(/-/g, "/")); | |
} catch (e) { | |
date = new Date(); | |
} | |
} | |
let string = '', | |
mo = date.getMonth(), // month (0-11) | |
m1 = mo + 1, // month (1-12) | |
dow = date.getDay(), // day of week (0-6) | |
d = date.getDate(), // day of the month (1-31) | |
y = date.getFullYear(), // 1999 or 2003 | |
h = date.getHours(), // hour (0-23) | |
mi = date.getMinutes(), // minute (0-59) | |
s = date.getSeconds(); // seconds (0-59) | |
for (let i of format.match(/(\\)*./g)) { | |
switch (i) { | |
case 'j': // Day of the month without leading zeros (1 to 31) | |
string += d; | |
break; | |
case 'd': // Day of the month, 2 digits with leading zeros (01 to 31) | |
string += (d < 10) ? "0" + d : d; | |
break; | |
case 'l': // (lowercase 'L') A full textual representation of the day of the week | |
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; | |
string += days[dow]; | |
break; | |
case 'w': // Numeric representation of the day of the week (0=Sunday,1=Monday,...6=Saturday) | |
string += dow; | |
break; | |
case 'D': // A textual representation of a day, three letters | |
var days = ["Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"]; | |
string += days[dow]; | |
break; | |
case 'm': // Numeric representation of a month, with leading zeros (01 to 12) | |
string += (m1 < 10) ? "0" + m1 : m1; | |
break; | |
case 'n': // Numeric representation of a month, without leading zeros (1 to 12) | |
string += m1; | |
break; | |
case 'F': // A full textual representation of a month, such as January or March | |
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; | |
string += months[mo]; | |
break; | |
case 'M': // A short textual representation of a month, three letters (Jan - Dec) | |
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; | |
string += months[mo]; | |
break; | |
case 'Y': // A full numeric representation of a year, 4 digits (1999 OR 2003) | |
string += y; | |
break; | |
case 'y': // A two digit representation of a year (99 OR 03) | |
string += y.toString().slice(-2); | |
break; | |
case 'H': // 24-hour format of an hour with leading zeros (00 to 23) | |
string += (h < 10) ? "0" + h : h; | |
break; | |
case 'g': // 12-hour format of an hour without leading zeros (1 to 12) | |
var hour = (h === 0) ? 12 : h; | |
string += (hour > 12) ? hour - 12 : hour; | |
break; | |
case 'h': // 12-hour format of an hour with leading zeros (01 to 12) | |
var hour = (h === 0) ? 12 : h; | |
hour = (hour > 12) ? hour - 12 : hour; | |
string += (hour < 10) ? "0" + hour : hour; | |
break; | |
case 'a': // Lowercase Ante meridiem and Post meridiem (am or pm) | |
string += (h < 12) ? "am" : "pm"; | |
break; | |
case 'i': // Minutes with leading zeros (00 to 59) | |
string += (mi < 10) ? "0" + mi : mi; | |
break; | |
case 's': // Seconds, with leading zeros (00 to 59) | |
string += (s < 10) ? "0" + s : s; | |
break; | |
case 'c': // ISO 8601 date (eg: 2012-11-20T18:05:54.944Z) | |
string += date.toISOString(); | |
break; | |
default: | |
if (i.startsWith("\\")) i = i.substr(1); | |
string += i; | |
} | |
} | |
return string; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment