PHP-like date formatting for JS

Downloads in past


0.1.18 years ago8 years agoMinified + gzip package size for date_format in KB


date-format === A lightweight (~3 kb) function fo format date "like in PHP". Also, not all of the php patterns are available (say, timezone-specific ones aren't!). If you need more complex implementation you should probably use this or this or probably something else (there's a plenty around, actually) I needed a tiny date function to use with JS templates. Also I needed practice. So I wrote this. Note that all the pattern values are calculated on execution. It's pretty quick as it is mostly just text manipulation, but I thought you should probably be aware. Also the patterns are compiled into an ugly regex, which is then replaced with values. Installing --- Install using bower:
bower install date-format --save
And then add dateformat.js file to your page:
<script type="text/javascript" src="bower_components/date-format/date-format.js">
Usage --- There's a function called dateformat in global scope (in browser). It accepts 2 parameters - the date object and the format string:
var date = new Date('Feb 2, 2015 03:24:13');
date_format(date, 'M j-S, Y'); // February 2-nd, 2015


The library can extend the Date.prototype with new method - format, which accepts a string of format. It is no longer happening because serious people insist that extending prototypes is for dummies and should be optional, and who am I to argue? :D To extend the Date.prototype with format method - use date_format.extendPrototype function. Sure, you can call this multiple times, but better call it once :P
new Date('Feb 2, 2015 03:24:13').format('M j-S, Y');            
new Date('Feb 2, 2015 03:24:13').format('j-S F of Y, g:i A');   //2-nd February of 2015, 3:24 AM
Supported identifiers ---


- d - day of month with leading zeros (01 to 31) - j - day of month without leading zeros (1 to 31) - S - day month suffix. (th, st, nd or rd) - z - day of year (1 to 365)


- D - three-symbol week day name (Mon to Sun) - l - full week day name (Monday to Sunday) - w - week day (1 to 7) - W - number of week. Weeks starting from monday. (1 to 53)


- m - Month number with leading zeros (01 to 12) - M - Three-symbol month name (Jan to Dec) - F - Full month name (January to December)


- Y - Full year number (for example, 2015) - y - Last two digits of year (for example, 15)


- g - Hours in 12-hour format (1 to 12) - G - Hours in 12-hour format with leading zeros (01 to 12) - h - Hours in 24-hour format (0 to 23) - H - Hours in 24-hour format with leading zeros (01 to 23) - i - Minutes with leading zeros (00 to 59) - s - Seconds with leading zeros (00 to 59) - a - ante/post meridem (am or pm) - A - uppercase ante/post meridem (AM or PM) - U - Unix timestamp in seconds (for example, 1325294640) - c - Iso time format (for example, 2011-12-31T01:24:00.000Z) Escaping --- You can escape characters by adding a backslash to them. In string literals, of course, that would be double backslash:
var date = new Date('Feb 2, 2015 03:24:00');
console.log(date_format(date, 'To\\d\\a\\y \\i\\s jS M, Y'));
// Today is 2nd Feb, 2015
If you need a backslash itself in a pattern... I feel sorry for you. Not in this version. Actually you should not pass huge strings as format, so I believe it is fine. No-conflict --- You can get rid of the lib from global scope. In case something else called date
format should be there, maybe. Or just if you are pedantic, whatever. You can call the dateformat.noConflict() function, which fill remove the dateformat from global scope, restore previous value (if any) and return the library itself so you can assign it to whatever you want. Customizing --- Yeah, that is pretty stupid, but you can add own localization or something. Like this:
date_format.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
date_format.months = [
'January', 'February', 'March', 'April', 'May', 'June', 'Jule','August', 'September', 'October',
'November', 'December'
date_format.ordinalSuffix = function (n) {
return ["th", "st", "nd", "rd"][(n = ~~ (n < 0 ? -n : n) % 100) > 10 && n < 14 || (n %= 10) > 3 ? 0 : n];
ordinalSuffix is a function used for month day suffix (S identifier). Currently the one written by Dave Furfero from here is used, but you can replace it with your own.
date_format.days = ['Воскресенье',' Понедельник', 'Вторник', 'Среда','Четверг','Пятница', 'Суббота'];
date_format.months = [
'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль','Август', 'Сентябрь', 'Оттябрь',
'Ноябрь', 'Декабрь'
dafe_format.ordinalSuffix = function(){
Node.js --- In Node you use it like this:
var date_format = require('date_format');
(After installing via NPM, using npm install date_format, of course)