-
-
Save Ebugo/10b5c1a87b2dac685603dc5af7168782 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
I was trying to find suitable solution for me and I ended up with writing my own
https://gist.github.com/kubiqsk/c60207a3075104df7cc1822a95053ecd