Last active
September 12, 2018 10:37
-
-
Save bojidaryovchev/2f3d6cb8ba5967840606d87d1cb90fff to your computer and use it in GitHub Desktop.
Date Formatting in JavaScript
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
const months = [ | |
'January', | |
'February', | |
'March', | |
'April', | |
'May', | |
'June', | |
'July', | |
'August', | |
'September', | |
'October', | |
'November', | |
'December' | |
]; | |
const days = [ | |
'Monday', | |
'Tuesday', | |
'Wednesday', | |
'Thursday', | |
'Friday', | |
'Saturday', | |
'Sunday' | |
]; | |
export const formatDate = (date, format) => { | |
const secondFormats = ['s', 'ss'].sort((a, b) => b.length - a.length); | |
const minuteFormats = ['m', 'mm'].sort((a, b) => b.length - a.length); | |
const hourFormats = ['H', 'HH'].sort((a, b) => b.length - a.length); | |
const dayFormats = ['dd', 'ddd', 'dddd'].sort((a, b) => b.length - a.length); | |
const monthFormats = ['MM', 'MMM', 'MMMM'].sort((a, b) => b.length - a.length); | |
const yearFormats = ['yyyy'].sort((a, b) => b.length - a.length); | |
secondFormats.forEach(sf => { | |
const regex = new RegExp(sf, 'g'); | |
switch (sf) { | |
case 'ss': | |
let seconds = date.getSeconds().toString(); | |
let length = seconds.length; | |
if (!--length) { | |
seconds = `0${seconds}`; | |
} | |
format = format.replace(regex, seconds); | |
break; | |
case 's': | |
format = format.replace(regex, date.getSeconds().toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
minuteFormats.forEach(mf => { | |
const regex = new RegExp(mf, 'g'); | |
switch (mf) { | |
case 'mm': | |
let minutes = date.getMinutes().toString(); | |
let length = minutes.length; | |
if (!--length) { | |
minutes = `0${minutes}`; | |
} | |
format = format.replace(regex, minutes); | |
break; | |
case 'm': | |
format = format.replace(regex, date.getMinutes().toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
hourFormats.forEach(hf => { | |
const regex = new RegExp(hf, 'g'); | |
switch (hf) { | |
case 'HH': | |
let hours = date.getHours().toString(); | |
let length = hours.length; | |
if (!--length) { | |
hours = `0${hours}`; | |
} | |
format = format.replace(regex, hours); | |
break; | |
case 'H': | |
format = format.replace(regex, date.getHours().toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
dayFormats.forEach(df => { | |
const regex = new RegExp(df, 'g'); | |
switch (df) { | |
case 'dddd': | |
format = format.replace(regex, days[date.getDay()]); | |
break; | |
case 'ddd': | |
format = format.replace(regex, days[date.getDay()].substr(0, df.length)); | |
break; | |
case 'dd': | |
format = format.replace(regex, date.getDate().toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
monthFormats.forEach(mf => { | |
const regex = new RegExp(mf, 'g'); | |
switch (mf) { | |
case 'MMMM': | |
format = format.replace(regex, months[date.getMonth()]); | |
break; | |
case 'MMM': | |
format = format.replace(regex, months[date.getMonth()].substr(0, mf.length)); | |
break; | |
case 'MM': | |
let month = date.getMonth(); | |
format = format.replace(regex, (++month).toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
yearFormats.forEach(yf => { | |
const regex = new RegExp(yf, 'g'); | |
switch (yf) { | |
case 'yyyy': | |
format = format.replace(regex, date.getFullYear().toString()); | |
break; | |
default: | |
return; | |
} | |
}); | |
return format; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment