diff --git a/.verb.md b/.verb.md index 6148101..60186a7 100644 --- a/.verb.md +++ b/.verb.md @@ -1,96 +1,115 @@ -## v2.0.0 - -**Breaking changes** - -Default pattern was changed from `YYYY:MM:DD` to `YYYY-MM-DD`. See https://github.com/jonschlinkert/time-stamp/issues/3 for more details. - ## Usage ```js -var timestamp = require('{%= name %}'); +const timestamp = require('{%= name %}'); -timestamp(); +console.log(timestamp()); //=> {%= timestamp() %} -timestamp.utc(); + +console.log(timestamp.utc()); //=> {%= timestampUTC() %} +``` + +## Customizing the timestamp -timestamp('YYYYMMDD'); +You may also pass a string to format the generated timestamp. + +```js +console.log(timestamp('YYYYMMDD')); //=> {%= timestamp('YYYYMMDD') %} -timestamp.utc('YYYYMMDD'); + +console.log(timestamp.utc('YYYYMMDD')); //=> {%= timestampUTC('YYYYMMDD') %} +``` + +**Supported patterns** -timestamp('YYYYMMDD:ss'); +- `YYYY`: full year (ex: **{%= timestamp("YYYY") %}**) +- `MM`: month (ex: **04**) +- `DD`: day (ex: **01**) +- `HH`: hours (ex: **12**) +- `mm`: minutes (ex: **59**) +- `ss`: seconds (ex: **09**) +- `ms`: milliseconds (ex: **532**) + +**Usage Examples** + +```js +console.log(timestamp('YYYYMMDD')); +//=> {%= timestamp('YYYYMMDD') %} +console.log(timestamp.utc('YYYYMMDD')); +//=> {%= timestampUTC('YYYYMMDD') %} + +console.log(timestamp('YYYYMMDD:ss')); //=> {%= timestamp('YYYYMMDD:ss') %} -timestamp.utc('YYYYMMDD:ss'); +console.log(timestamp.utc('YYYYMMDD:ss')); //=> {%= timestampUTC('YYYYMMDD:ss') %} -timestamp('YYYY/MM/DD:mm:ss'); +console.log(timestamp('YYYY/MM/DD:mm:ss')); //=> {%= timestamp('YYYY/MM/DD:mm:ss') %} -timestamp.utc('YYYY/MM/DD:mm:ss'); +console.log(timestamp.utc('YYYY/MM/DD:mm:ss')); //=> {%= timestampUTC('YYYY/MM/DD:mm:ss') %} -timestamp('YYYY:MM:DD'); +console.log(timestamp('YYYY:MM:DD')); //=> {%= timestamp('YYYY:MM:DD') %} -timestamp.utc('YYYY:MM:DD'); +console.log(timestamp.utc('YYYY:MM:DD')); //=> {%= timestampUTC('YYYY:MM:DD') %} -timestamp('[YYYY:MM:DD]'); +console.log(timestamp('[YYYY:MM:DD]')); //=> {%= timestamp('[YYYY:MM:DD]') %} -timestamp.utc('[YYYY:MM:DD]'); +console.log(timestamp.utc('[YYYY:MM:DD]')); //=> {%= timestampUTC('[YYYY:MM:DD]') %} -timestamp('YYYY/MM/DD'); +console.log(timestamp('YYYY/MM/DD')); //=> {%= timestamp('YYYY/MM/DD') %} -timestamp.utc('YYYY/MM/DD'); +console.log(timestamp.utc('YYYY/MM/DD')); //=> {%= timestampUTC('YYYY/MM/DD') %} -timestamp('YYYY:MM'); +console.log(timestamp('YYYY:MM')); //=> {%= timestamp('YYYY:MM') %} -timestamp.utc('YYYY:MM'); +console.log(timestamp.utc('YYYY:MM')); //=> {%= timestampUTC('YYYY:MM') %} -timestamp('YYYY'); +console.log(timestamp('YYYY')); //=> {%= timestamp('YYYY') %} -timestamp.utc('YYYY'); +console.log(timestamp.utc('YYYY')); //=> {%= timestampUTC('YYYY') %} -timestamp('MM'); +console.log(timestamp('MM')); //=> {%= timestamp('MM') %} -timestamp.utc('MM'); +console.log(timestamp.utc('MM')); //=> {%= timestampUTC('MM') %} -timestamp('DD'); +console.log(timestamp('DD')); //=> {%= timestamp('DD') %} -timestamp.utc('DD'); +console.log(timestamp.utc('DD')); //=> {%= timestampUTC('DD') %} -timestamp('HH'); +console.log(timestamp('HH')); //=> {%= timestamp('HH') %} -timestamp.utc('HH'); +console.log(timestamp.utc('HH')); //=> {%= timestampUTC('HH') %} -timestamp('mm'); +console.log(timestamp('mm')); //=> {%= timestamp('mm') %} -timestamp.utc('mm'); +console.log(timestamp.utc('mm')); //=> {%= timestampUTC('mm') %} -timestamp('ss'); +console.log(timestamp('ss')); //=> {%= timestamp('ss') %} -timestamp.utc('ss'); +console.log(timestamp.utc('ss')); //=> {%= timestampUTC('ss') %} -timestamp('ms'); +console.log(timestamp('ms')); //=> {%= timestamp('ms') %} -timestamp.utc('ms'); +console.log(timestamp.utc('ms')); //=> {%= timestampUTC('ms') %} ``` -**Valid patterns** +## Release history -- `YYYY`: full year (ex: **{%= timestamp("YYYY") %}**) -- `MM`: month (ex: **04**) -- `DD`: day (ex: **01**) -- `HH`: hours (ex: **12**) -- `mm`: minutes (ex: **59**) -- `ss`: seconds (ex: **09**) -- `ms`: milliseconds (ex: **532**) +### v2.0.0 + +**Breaking changes** + +Default pattern was changed from `YYYY:MM:DD` to `YYYY-MM-DD`. See [issues/3](../../issues) for more details. diff --git a/README.md b/README.md index e137c2c..f9dcc79 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,15 @@ Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. +- [Install](#install) +- [Usage](#usage) +- [Customizing the timestamp](#customizing-the-timestamp) +- [Release history](#release-history) + * [v2.0.0](#v200) +- [About](#about) + +_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ + ## Install Install with [npm](https://www.npmjs.com/): @@ -12,94 +21,31 @@ Install with [npm](https://www.npmjs.com/): $ npm install --save time-stamp ``` -## v2.0.0 +## Usage -**Breaking changes** +```js +const timestamp = require('time-stamp'); -Default pattern was changed from `YYYY:MM:DD` to `YYYY-MM-DD`. See https://github.com/jonschlinkert/time-stamp/issues/3 for more details. +console.log(timestamp()); +//=> 2018-10-26 -## Usage +console.log(timestamp.utc()); +//=> 2018-10-26 +``` + +## Customizing the timestamp + +You may also pass a string to format the generated timestamp. ```js -var timestamp = require('time-stamp'); - -timestamp(); -//=> 2018-08-22 -timestamp.utc(); -//=> 2018-08-22 - -timestamp('YYYYMMDD'); -//=> 20180822 -timestamp.utc('YYYYMMDD'); -//=> 20180822 - -timestamp('YYYYMMDD:ss'); -//=> 20180822:39 -timestamp.utc('YYYYMMDD:ss'); -//=> 20180822:39 - -timestamp('YYYY/MM/DD:mm:ss'); -//=> 2018/08/22:16:39 -timestamp.utc('YYYY/MM/DD:mm:ss'); -//=> 2018/08/22:16:39 - -timestamp('YYYY:MM:DD'); -//=> 2018:08:22 -timestamp.utc('YYYY:MM:DD'); -//=> 2018:08:22 - -timestamp('[YYYY:MM:DD]'); -//=> [2018:08:22] -timestamp.utc('[YYYY:MM:DD]'); -//=> [2018:08:22] - -timestamp('YYYY/MM/DD'); -//=> 2018/08/22 -timestamp.utc('YYYY/MM/DD'); -//=> 2018/08/22 - -timestamp('YYYY:MM'); -//=> 2018:08 -timestamp.utc('YYYY:MM'); -//=> 2018:08 - -timestamp('YYYY'); -//=> 2018 -timestamp.utc('YYYY'); -//=> 2018 +console.log(timestamp('YYYYMMDD')); +//=> 20181026 -timestamp('MM'); -//=> 08 -timestamp.utc('MM'); -//=> 08 - -timestamp('DD'); -//=> 22 -timestamp.utc('DD'); -//=> 22 - -timestamp('HH'); -//=> 11 -timestamp.utc('HH'); -//=> 15 - -timestamp('mm'); -//=> 16 -timestamp.utc('mm'); -//=> 16 - -timestamp('ss'); -//=> 39 -timestamp.utc('ss'); -//=> 39 - -timestamp('ms'); -//=> 142 -timestamp.utc('ms'); -//=> 142 +console.log(timestamp.utc('YYYYMMDD')); +//=> 20181026 ``` -**Valid patterns** +**Supported patterns** * `YYYY`: full year (ex: **2018**) * `MM`: month (ex: **04**) @@ -109,6 +55,88 @@ timestamp.utc('ms'); * `ss`: seconds (ex: **09**) * `ms`: milliseconds (ex: **532**) +**Usage Examples** + +```js +console.log(timestamp('YYYYMMDD')); +//=> 20181026 +console.log(timestamp.utc('YYYYMMDD')); +//=> 20181026 + +console.log(timestamp('YYYYMMDD:ss')); +//=> 20181026:24 +console.log(timestamp.utc('YYYYMMDD:ss')); +//=> 20181026:24 + +console.log(timestamp('YYYY/MM/DD:mm:ss')); +//=> 2018/10/26:46:24 +console.log(timestamp.utc('YYYY/MM/DD:mm:ss')); +//=> 2018/10/26:46:24 + +console.log(timestamp('YYYY:MM:DD')); +//=> 2018:10:26 +console.log(timestamp.utc('YYYY:MM:DD')); +//=> 2018:10:26 + +console.log(timestamp('[YYYY:MM:DD]')); +//=> [2018:10:26] +console.log(timestamp.utc('[YYYY:MM:DD]')); +//=> [2018:10:26] + +console.log(timestamp('YYYY/MM/DD')); +//=> 2018/10/26 +console.log(timestamp.utc('YYYY/MM/DD')); +//=> 2018/10/26 + +console.log(timestamp('YYYY:MM')); +//=> 2018:10 +console.log(timestamp.utc('YYYY:MM')); +//=> 2018:10 + +console.log(timestamp('YYYY')); +//=> 2018 +console.log(timestamp.utc('YYYY')); +//=> 2018 + +console.log(timestamp('MM')); +//=> 10 +console.log(timestamp.utc('MM')); +//=> 10 + +console.log(timestamp('DD')); +//=> 26 +console.log(timestamp.utc('DD')); +//=> 26 + +console.log(timestamp('HH')); +//=> 00 +console.log(timestamp.utc('HH')); +//=> 04 + +console.log(timestamp('mm')); +//=> 46 +console.log(timestamp.utc('mm')); +//=> 46 + +console.log(timestamp('ss')); +//=> 24 +console.log(timestamp.utc('ss')); +//=> 24 + +console.log(timestamp('ms')); +//=> 186 +console.log(timestamp.utc('ms')); +//=> 186 +``` + +## Release history + +### v2.0.0 + +**Breaking changes** + +Default pattern was changed from `YYYY:MM:DD` to `YYYY-MM-DD`. See [issues/3](../../issues) for more details. + ## About
@@ -161,7 +189,7 @@ You might also be interested in these projects: | **Commits** | **Contributor** | | --- | --- | | 31 | [jonschlinkert](https://github.com/jonschlinkert) | -| 4 | [doowb](https://github.com/doowb) | +| 7 | [doowb](https://github.com/doowb) | | 1 | [evocateur](https://github.com/evocateur) | | 1 | [mendenhallmagic](https://github.com/mendenhallmagic) | | 1 | [mvanroon](https://github.com/mvanroon) | @@ -183,4 +211,4 @@ Released under the [MIT License](LICENSE). *** -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on August 22, 2018._ \ No newline at end of file +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on October 26, 2018._ \ No newline at end of file diff --git a/index.js b/index.js index b55ce90..9c0f851 100644 --- a/index.js +++ b/index.js @@ -7,59 +7,37 @@ 'use strict'; -/** - * Parse the given pattern and return a formatted - * timestamp. - * - * @param {String} `pattern` Date pattern. - * @param {Date} `date` Date object. - * @param {Bool} `useUTC` Whether or not to use UTC (local timezone is used otherwise) - * @return {String} - */ +var dateRegex = /(?=(YYYY|YY|MM|DD|HH|mm|ss|ms))\1([:\/]*)/g; +var timespan = { + YYYY: ['getFullYear', 4], + YY: ['getFullYear', 2], + MM: ['getMonth', 2, 1], // getMonth is zero-based, thus the extra increment field + DD: ['getDate', 2], + HH: ['getHours', 2], + mm: ['getMinutes', 2], + ss: ['getSeconds', 2], + ms: ['getMilliseconds', 3] +}; -function _getTimestamp(pattern, date, useUTC) { - if (typeof pattern !== 'string') { - date = pattern; - pattern = 'YYYY-MM-DD'; +var timestamp = function(str, date, utc) { + if (typeof str !== 'string') { + date = str; + str = 'YYYY-MM-DD'; } if (!date) date = new Date(); - - function timestamp() { - var regex = /(?=(YYYY|YY|MM|DD|HH|mm|ss|ms))\1([:\/]*)/; - var match = regex.exec(pattern); - - if (match) { - var increment = method(match[1], useUTC); - var val = '00' + String(date[increment[0]]() + (increment[2] || 0)); - var res = val.slice(-increment[1]) + (match[2] || ''); - pattern = pattern.replace(match[0], res); - timestamp(); - } - } - - timestamp(pattern); - return pattern; + return str.replace(dateRegex, function(match, key, rest) { + var args = timespan[key]; + var name = args[0]; + var chars = args[1]; + if (utc === true) name = 'getUTC' + name.slice(3); + var val = '00' + String(date[name]() + (args[2] || 0)); + return val.slice(-chars) + (rest || ''); + }); }; -function method(key, useUTC) { - return ({ - YYYY: [useUTC ? 'getUTCFullYear' : 'getFullYear', 4], - YY: [useUTC ? 'getUTCFullYear' : 'getFullYear', 2], - // getMonth is zero-based, thus the extra increment field - MM: [useUTC ? 'getUTCMonth' : 'getMonth', 2, 1], - DD: [useUTC ? 'getUTCDate' : 'getDate', 2], - HH: [useUTC ? 'getUTCHours' : 'getHours', 2], - mm: [useUTC ? 'getUTCMinutes' : 'getMinutes', 2], - ss: [useUTC ? 'getUTCSeconds' : 'getSeconds', 2], - ms: [useUTC ? 'getUTCMilliseconds' : 'getMilliseconds', 3] - })[key]; -} - -module.exports = function(pattern, date) { - return _getTimestamp(pattern, date, false); +timestamp.utc = function(str, date) { + return timestamp(str, date, true); }; -module.exports.utc = function(pattern, date) { - return _getTimestamp(pattern, date, true); -}; +module.exports = timestamp; diff --git a/package.json b/package.json index 849a2fa..d2270e2 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,9 @@ "test": "mocha" }, "devDependencies": { - "gulp-format-md": "^0.1.12", - "mocha": "^3.4.1", - "pad-left": "^2.1.0", - "verb-generate-readme": "^0.8.0" + "gulp-format-md": "^1.0.0", + "mocha": "^5.2.0", + "pad-left": "^2.1.0" }, "keywords": [ "console", @@ -47,11 +46,14 @@ ], "verb": { "run": true, - "toc": false, + "toc": true, "layout": "default", "tasks": [ "readme" ], + "helpers": [ + "./helpers.js" + ], "plugins": [ "gulp-format-md" ], @@ -68,9 +70,6 @@ "year" ] }, - "reflinks": [ - "verb" - ], "lint": { "reflinks": true } diff --git a/test.js b/test.js index 5e8f5d1..6633ebe 100644 --- a/test.js +++ b/test.js @@ -1,10 +1,3 @@ -/*! - * time-stamp - * - * Copyright (c) 2015-2017 Jon Schlinkert. - * Licensed under the MIT license. - */ - 'use strict'; require('mocha');