Skip to content

samsonjs/strftime

Repository files navigation

strftime

strftime for JavaScript. Works in (at least) node.js and browsers. Supports localization and timezones. Most standard specifiers from C are supported as well as some other extensions from Ruby.

version 0.10.3 on npm node version 0.2 and up MIT License 0 dependencies!

Installation

node:

npm install strftime

bower:

bower install strftime

component:

component install samsonjs/strftime

yarn:

yarn add strftime

Or you can copy strftime.js wherever you want to use it, whether that's with a <script> tag or require or anything else.

Changelog

View the changelog.

Usage

    var strftime = require('strftime') // not required in browsers
    console.log(strftime('%B %d, %Y %H:%M:%S')) // => April 28, 2011 18:21:08
    console.log(strftime('%F %T', new Date(1307472705067))) // => 2011-06-07 18:51:45

If you want to localize it:

    var strftime = require('strftime') // not required in browsers
    var it_IT = {
        identifier: 'it-IT',
        days: ['domenica', 'lunedi', 'martedi', 'mercoledi', 'giovedi', 'venerdi', 'sabato'],
        shortDays: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
        months: ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'],
        shortMonths: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'],
        AM: 'AM',
        PM: 'PM',
        am: 'am',
        pm: 'pm',
        formats: {
            D: '%m/%d/%y',
            F: '%Y-%m-%d',
            R: '%H:%M',
            X: '%T',
            c: '%a %b %d %X %Y',
            r: '%I:%M:%S %p',
            T: '%H:%M:%S',
            v: '%e-%b-%Y',
            x: '%D'
        }
    }
    var strftimeIT = strftime.localize(it_IT)
    console.log(strftimeIT('%B %d, %Y %H:%M:%S')) // => aprile 28, 2011 18:21:08
    console.log(strftimeIT('%B %d, %Y %H:%M:%S', new Date(1307472705067))) // => giugno 7, 2011 18:51:45

Some locales are bundled and can be used like so:

    var strftime = require('strftime') // not required in browsers
    var strftimeIT = strftime.localizeByIdentifier('it_IT')
    console.log(strftimeIT('%B %d, %Y %H:%M:%S')) // => aprile 28, 2011 18:21:08
    console.log(strftimeIT('%B %d, %Y %H:%M:%S', new Date(1307472705067))) // => giugno 7, 2011 18:51:45

The full list of bundled locales is below.

Time zones can be passed in as an offset from GMT in minutes.

    var strftime = require('strftime') // not required in browsers
    var strftimePDT = strftime.timezone(-420)
    var strftimeCEST = strftime.timezone(120)
    console.log(strftimePDT('%B %d, %y %H:%M:%S', new Date(1307472705067))) // => June 07, 11 11:51:45
    console.log(strftimeCEST('%F %T', new Date(1307472705067))) // => 2011-06-07 20:51:45

Alternatively you can use the timezone format used by ISO 8601, +HHMM or -HHMM.

    var strftime = require('strftime') // not required in browsers
    var strftimePDT = strftime.timezone('-0700')
    var strftimeCEST = strftime.timezone('+0200')
    console.log(strftimePDT('%F %T', new Date(1307472705067))) // => 2011-06-07 11:51:45
    console.log(strftimeCEST('%F %T', new Date(1307472705067))) // => 2011-06-07 20:51:45

Supported Specifiers

Extensions from Ruby are noted in the following list.

Unsupported specifiers are rendered without the percent sign. e.g. %q becomes q. Use %% to get a literal % sign.

  • A: full weekday name
  • a: abbreviated weekday name
  • B: full month name
  • b: abbreviated month name
  • C: AD century (year / 100), padded to 2 digits
  • c: equivalent to %a %b %d %X %Y %Z in en_US (based on locale)
  • D: equivalent to %m/%d/%y in en_US (based on locale)
  • d: day of the month, padded to 2 digits (01-31)
  • e: day of the month, padded with a leading space for single digit values (1-31)
  • F: equivalent to %Y-%m-%d in en_US (based on locale)
  • H: the hour (24-hour clock), padded to 2 digits (00-23)
  • h: the same as %b (abbreviated month name)
  • I: the hour (12-hour clock), padded to 2 digits (01-12)
  • j: day of the year, padded to 3 digits (001-366)
  • k: the hour (24-hour clock), padded with a leading space for single digit values (0-23)
  • L: the milliseconds, padded to 3 digits [Ruby extension]
  • l: the hour (12-hour clock), padded with a leading space for single digit values (1-12)
  • M: the minute, padded to 2 digits (00-59)
  • m: the month, padded to 2 digits (01-12)
  • n: newline character
  • o: day of the month as an ordinal (without padding), e.g. 1st, 2nd, 3rd, 4th, ...
  • P: "am" or "pm" in lowercase (Ruby extension, based on locale)
  • p: "AM" or "PM" (based on locale)
  • R: equivalent to %H:%M in en_US (based on locale)
  • r: equivalent to %I:%M:%S %p in en_US (based on locale)
  • S: the second, padded to 2 digits (00-60)
  • s: the number of seconds since the Epoch, UTC
  • T: equivalent to %H:%M:%S in en_US (based on locale)
  • t: tab character
  • U: week number of the year, Sunday as the first day of the week, padded to 2 digits (00-53)
  • u: the weekday, Monday as the first day of the week (1-7)
  • v: equivalent to %e-%b-%Y in en_US (based on locale)
  • W: week number of the year, Monday as the first day of the week, padded to 2 digits (00-53)
  • w: the weekday, Sunday as the first day of the week (0-6)
  • X: equivalent to %T or %r in en_US (based on locale)
  • x: equivalent to %D in en_US (based on locale)
  • Y: the year with the century
  • y: the year without the century, padded to 2 digits (00-99)
  • Z: the time zone name, replaced with an empty string if it is not found
  • z: the time zone offset from UTC, with a leading plus sign for UTC and zones east of UTC and a minus sign for those west of UTC, hours and minutes follow each padded to 2 digits and with no delimiter between them

For more detail see man 3 strftime as the format specifiers should behave identically. If behaviour differs please file a bug.

Any specifier can be modified with -, _, 0, or : as well, as in Ruby. Using %- will omit any leading zeroes or spaces, %_ will force spaces for padding instead of the default, and %0 will force zeroes for padding. There's some redundancy here as %-d and %e have the same result, but it solves some awkwardness with formats like %l. Using %: for time zone offset, as in %:z will insert a colon as a delimiter.

Bundled Locales

  • de_DE
  • en_CA
  • en_US
  • es_MX
  • fr_FR
  • it_IT
  • nl_NL
  • pt_BR
  • ru_RU
  • tr_TR
  • zh_CN

Contributors

License

Copyright 2010 - 2024 Sami Samhuri sami@samhuri.net

MIT license