pax_global_header00006660000000000000000000000064130157533570014523gustar00rootroot0000000000000052 comment=589d377d2c1d8571e0d71bd0f058abe7d1f50915 node-dateformat-2.0.0/000077500000000000000000000000001301575335700145735ustar00rootroot00000000000000node-dateformat-2.0.0/.gitignore000066400000000000000000000011531301575335700165630ustar00rootroot00000000000000# .gitignore # # Copyright (c) 2014 Charlike Mike Reagent, contributors. # Released under the MIT license. # # Always-ignore dirs # # #################### _gh_pages node_modules bower_components components vendor build dest dist src lib-cov coverage nbproject cache temp tmp # Packages # # ########## *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip # OS, Logs and databases # # ######################### *.pid *.dat *.log *.sql *.sqlite *~ ~* # Another files # # ############### Icon? .DS_Store* Thumbs.db ehthumbs.db Desktop.ini npm-debug.log .directory ._* koa-better-bodynode-dateformat-2.0.0/.npmignore000066400000000000000000000000211301575335700165630ustar00rootroot00000000000000test .travis.yml node-dateformat-2.0.0/.travis.yml000066400000000000000000000000611301575335700167010ustar00rootroot00000000000000language: node_js node_js: - "0.11" - "0.10" node-dateformat-2.0.0/LICENSE000066400000000000000000000020631301575335700156010ustar00rootroot00000000000000(c) 2007-2009 Steven Levithan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node-dateformat-2.0.0/Readme.md000066400000000000000000000116501301575335700163150ustar00rootroot00000000000000# dateformat A node.js package for Steven Levithan's excellent [dateFormat()][dateformat] function. [![Build Status](https://travis-ci.org/felixge/node-dateformat.svg)](https://travis-ci.org/felixge/node-dateformat) ## Modifications * Removed the `Date.prototype.format` method. Sorry folks, but extending native prototypes is for suckers. * Added a `module.exports = dateFormat;` statement at the bottom * Added the placeholder `N` to get the ISO 8601 numeric representation of the day of the week ## Installation ```bash $ npm install dateformat $ dateformat --help ``` ## Usage As taken from Steven's post, modified to match the Modifications listed above: ```js var dateFormat = require('dateformat'); var now = new Date(); // Basic usage dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT"); // Saturday, June 9th, 2007, 5:46:21 PM // You can use one of several named masks dateFormat(now, "isoDateTime"); // 2007-06-09T17:46:21 // ...Or add your own dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"'; dateFormat(now, "hammerTime"); // 17:46! Can't touch this! // When using the standalone dateFormat function, // you can also provide the date as a string dateFormat("Jun 9 2007", "fullDate"); // Saturday, June 9, 2007 // Note that if you don't include the mask argument, // dateFormat.masks.default is used dateFormat(now); // Sat Jun 09 2007 17:46:21 // And if you don't include the date argument, // the current date and time is used dateFormat(); // Sat Jun 09 2007 17:46:22 // You can also skip the date argument (as long as your mask doesn't // contain any numbers), in which case the current date/time is used dateFormat("longTime"); // 5:46:22 PM EST // And finally, you can convert local time to UTC time. Simply pass in // true as an additional argument (no argument skipping allowed in this case): dateFormat(now, "longTime", true); // 10:46:21 PM UTC // ...Or add the prefix "UTC:" or "GMT:" to your mask. dateFormat(now, "UTC:h:MM:ss TT Z"); // 10:46:21 PM UTC // You can also get the ISO 8601 week of the year: dateFormat(now, "W"); // 42 // and also get the ISO 8601 numeric representation of the day of the week: dateFormat(now,"N"); // 6 ``` ### Mask options Mask | Description ---- | ----------- `d` | Day of the month as digits; no leading zero for single-digit days. `dd` | Day of the month as digits; leading zero for single-digit days. `ddd` | Day of the week as a three-letter abbreviation. `dddd` | Day of the week as its full name. `m` | Month as digits; no leading zero for single-digit months. `mm` | Month as digits; leading zero for single-digit months. `mmm` | Month as a three-letter abbreviation. `mmmm` | Month as its full name. `yy` | Year as last two digits; leading zero for years less than 10. `yyyy` | Year represented by four digits. `h` | Hours; no leading zero for single-digit hours (12-hour clock). `hh` | Hours; leading zero for single-digit hours (12-hour clock). `H` | Hours; no leading zero for single-digit hours (24-hour clock). `HH` | Hours; leading zero for single-digit hours (24-hour clock). `M` | Minutes; no leading zero for single-digit minutes. `MM` | Minutes; leading zero for single-digit minutes. `N` | ISO 8601 numeric representation of the day of the week. `o` | GMT/UTC timezone offset, e.g. -0500 or +0230. `s` | Seconds; no leading zero for single-digit seconds. `ss` | Seconds; leading zero for single-digit seconds. `S` | The date's ordinal suffix (st, nd, rd, or th). Works well with `d`. `l` | Milliseconds; gives 3 digits. `L` | Milliseconds; gives 2 digits. `t` | Lowercase, single-character time marker string: a or p. `tt` | Lowercase, two-character time marker string: am or pm. `T` | Uppercase, single-character time marker string: A or P. `TT` | Uppercase, two-character time marker string: AM or PM. `W` | ISO 8601 week number of the year, e.g. 42 `Z` | US timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the `'...'`, `"..."` | Literal character sequence. Surrounding quotes are removed. `UTC:` | Must be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The "UTC:" prefix is removed. ### Named Formats Name | Mask | Example ---- | ---- | ------- `default` | `ddd mmm dd yyyy HH:MM:ss` | Sat Jun 09 2007 17:46:21 `shortDate` | `m/d/yy` | 6/9/07 `mediumDate` | `mmm d, yyyy` | Jun 9, 2007 `longDate` | `mmmm d, yyyy` | June 9, 2007 `fullDate` | `dddd, mmmm d, yyyy` | Saturday, June 9, 2007 `shortTime` | `h:MM TT` | 5:46 PM `mediumTime` | `h:MM:ss TT` | 5:46:21 PM `longTime` | `h:MM:ss TT Z` | 5:46:21 PM EST `isoDate` | `yyyy-mm-dd` | 2007-06-09 `isoTime` | `HH:MM:ss` | 17:46:21 `isoDateTime` | `yyyy-mm-dd'T'HH:MM:ss` | 2007-06-09T17:46:21 `isoUtcDateTime` | `UTC:yyyy-mm-dd'T'HH:MM:ss'Z'` | 2007-06-09T22:46:21Z ## License (c) 2007-2009 Steven Levithan [stevenlevithan.com][stevenlevithan], MIT license. [dateformat]: http://blog.stevenlevithan.com/archives/date-time-format [stevenlevithan]: http://stevenlevithan.com/ node-dateformat-2.0.0/lib/000077500000000000000000000000001301575335700153415ustar00rootroot00000000000000node-dateformat-2.0.0/lib/dateformat.js000066400000000000000000000152601301575335700200310ustar00rootroot00000000000000/* * Date Format 1.2.3 * (c) 2007-2009 Steven Levithan * MIT license * * Includes enhancements by Scott Trenda * and Kris Kowal * * Accepts a date, a mask, or a date and a mask. * Returns a formatted version of the given date. * The date defaults to the current date/time. * The mask defaults to dateFormat.masks.default. */ (function(global) { 'use strict'; var dateFormat = (function() { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|'[^']*'|'[^']*'/g; var timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g; var timezoneClip = /[^-+\dA-Z]/g; // Regexes and supporting functions are cached through closure return function (date, mask, utc, gmt) { // You can't provide utc if you skip other args (use the 'UTC:' mask prefix) if (arguments.length === 1 && kindOf(date) === 'string' && !/\d/.test(date)) { mask = date; date = undefined; } date = date || new Date; if(!(date instanceof Date)) { date = new Date(date); } if (isNaN(date)) { throw TypeError('Invalid date'); } mask = String(dateFormat.masks[mask] || mask || dateFormat.masks['default']); // Allow setting the utc/gmt argument via the mask var maskSlice = mask.slice(0, 4); if (maskSlice === 'UTC:' || maskSlice === 'GMT:') { mask = mask.slice(4); utc = true; if (maskSlice === 'GMT:') { gmt = true; } } var _ = utc ? 'getUTC' : 'get'; var d = date[_ + 'Date'](); var D = date[_ + 'Day'](); var m = date[_ + 'Month'](); var y = date[_ + 'FullYear'](); var H = date[_ + 'Hours'](); var M = date[_ + 'Minutes'](); var s = date[_ + 'Seconds'](); var L = date[_ + 'Milliseconds'](); var o = utc ? 0 : date.getTimezoneOffset(); var W = getWeek(date); var N = getDayOfWeek(date); var flags = { d: d, dd: pad(d), ddd: dateFormat.i18n.dayNames[D], dddd: dateFormat.i18n.dayNames[D + 7], m: m + 1, mm: pad(m + 1), mmm: dateFormat.i18n.monthNames[m], mmmm: dateFormat.i18n.monthNames[m + 12], yy: String(y).slice(2), yyyy: y, h: H % 12 || 12, hh: pad(H % 12 || 12), H: H, HH: pad(H), M: M, MM: pad(M), s: s, ss: pad(s), l: pad(L, 3), L: pad(Math.round(L / 10)), t: H < 12 ? 'a' : 'p', tt: H < 12 ? 'am' : 'pm', T: H < 12 ? 'A' : 'P', TT: H < 12 ? 'AM' : 'PM', Z: gmt ? 'GMT' : utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''), o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), S: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10], W: W, N: N }; return mask.replace(token, function (match) { if (match in flags) { return flags[match]; } return match.slice(1, match.length - 1); }); }; })(); dateFormat.masks = { 'default': 'ddd mmm dd yyyy HH:MM:ss', 'shortDate': 'm/d/yy', 'mediumDate': 'mmm d, yyyy', 'longDate': 'mmmm d, yyyy', 'fullDate': 'dddd, mmmm d, yyyy', 'shortTime': 'h:MM TT', 'mediumTime': 'h:MM:ss TT', 'longTime': 'h:MM:ss TT Z', 'isoDate': 'yyyy-mm-dd', 'isoTime': 'HH:MM:ss', 'isoDateTime': 'yyyy-mm-dd\'T\'HH:MM:sso', 'isoUtcDateTime': 'UTC:yyyy-mm-dd\'T\'HH:MM:ss\'Z\'', 'expiresHeaderFormat': 'ddd, dd mmm yyyy HH:MM:ss Z' }; // Internationalization strings dateFormat.i18n = { dayNames: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], monthNames: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ] }; function pad(val, len) { val = String(val); len = len || 2; while (val.length < len) { val = '0' + val; } return val; } /** * Get the ISO 8601 week number * Based on comments from * http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html * * @param {Object} `date` * @return {Number} */ function getWeek(date) { // Remove time components of date var targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate()); // Change date to Thursday same week targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3); // Take January 4th as it is always in week 1 (see ISO 8601) var firstThursday = new Date(targetThursday.getFullYear(), 0, 4); // Change date to Thursday same week firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3); // Check if daylight-saving-time-switch occured and correct for it var ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset(); targetThursday.setHours(targetThursday.getHours() - ds); // Number of weeks between target Thursday and first Thursday var weekDiff = (targetThursday - firstThursday) / (86400000*7); return 1 + Math.floor(weekDiff); } /** * Get ISO-8601 numeric representation of the day of the week * 1 (for Monday) through 7 (for Sunday) * * @param {Object} `date` * @return {Number} */ function getDayOfWeek(date) { var dow = date.getDay(); if(dow === 0) { dow = 7; } return dow; } /** * kind-of shortcut * @param {*} val * @return {String} */ function kindOf(val) { if (val === null) { return 'null'; } if (val === undefined) { return 'undefined'; } if (typeof val !== 'object') { return typeof val; } if (Array.isArray(val)) { return 'array'; } return {}.toString.call(val) .slice(8, -1).toLowerCase(); }; if (typeof define === 'function' && define.amd) { define(function () { return dateFormat; }); } else if (typeof exports === 'object') { module.exports = dateFormat; } else { global.dateFormat = dateFormat; } })(this); node-dateformat-2.0.0/package.json000066400000000000000000000014261301575335700170640ustar00rootroot00000000000000{ "name": "dateformat", "description": "A node.js package for Steven Levithan's excellent dateFormat() function.", "maintainers": "Felix Geisendörfer ", "homepage": "https://github.com/felixge/node-dateformat", "author": "Steven Levithan", "contributors": [ "Steven Levithan", "Felix Geisendörfer ", "Christoph Tavan ", "Jon Schlinkert (https://github.com/jonschlinkert)" ], "version": "2.0.0", "license": "MIT", "main": "lib/dateformat", "devDependencies": { "underscore": "1.7.0", "mocha": "2.0.1" }, "engines": { "node": "*" }, "scripts": { "test": "mocha" }, "repository": { "type": "git", "url": "https://github.com/felixge/node-dateformat.git" } } node-dateformat-2.0.0/test/000077500000000000000000000000001301575335700155525ustar00rootroot00000000000000node-dateformat-2.0.0/test/test_dayofweek.js000066400000000000000000000006721301575335700211320ustar00rootroot00000000000000var assert = require('assert'); var dateFormat = require('./../lib/dateformat'); describe('dayOfWeek', function() { it('should correctly format the timezone part', function(done) { var start = 10; // the 10 of March 2013 is a Sunday for(var dow = 1; dow <= 7; dow++){ var date = new Date('2013-03-' + (start + dow)); var N = dateFormat(date, 'N'); assert.strictEqual(N, String(dow)); } done(); }); }); node-dateformat-2.0.0/test/test_formats.js000066400000000000000000000045441301575335700206310ustar00rootroot00000000000000var assert = require('assert'); var _ = require('underscore'); var dateFormat = require('../lib/dateformat'); var expects = { 'default': 'Wed Nov 26 2014 13:19:44', 'shortDate': '11/26/14', 'mediumDate': 'Nov 26, 2014', 'longDate': 'November 26, 2014', 'fullDate': 'Wednesday, November 26, 2014', 'shortTime': '1:19 PM', 'mediumTime': '1:19:44 PM', 'longTime': '1:19:44 PM %TZ_PREFIX%%TZ_OFFSET%', 'isoDate': '2014-11-26', 'isoTime': '13:19:44', 'isoDateTime': '2014-11-26T13:19:44%TZ_OFFSET%', 'isoUtcDateTime': '', 'expiresHeaderFormat': 'Wed, 26 Nov 2014 13:19:44 %TZ_PREFIX%%TZ_OFFSET%' }; function pad(num, size) { var s = num + ''; while (s.length < size) { s = '0' + s; } return s; } function parseOffset(date) { var offset = date.getTimezoneOffset(); var hours = Math.floor(-1 * offset / 60); var minutes = (-1 * offset) - (hours * 60); var sign = offset > 0 ? '-' : '+'; return { offset: offset, hours: hours, minutes: minutes, sign: sign, }; } function timezoneOffset(date) { var offset = parseOffset(date); return offset.sign + pad(offset.hours, 2) + pad(offset.minutes, 2); } describe('dateformat([now], [mask])', function() { _.each(dateFormat.masks, function(value, key) { it('should format `' + key + '` mask', function(done) { var now = new Date(2014, 10, 26, 13, 19, 44); var tzOffset = timezoneOffset(now); var expected = expects[key].replace(/%TZ_PREFIX%/, 'GMT') .replace(/%TZ_OFFSET%/g, tzOffset) .replace(/GMT\+0000/g, 'UTC'); if (key === 'isoUtcDateTime') { var offset = parseOffset(now); now.setHours(now.getHours() - offset.hours, now.getMinutes() - offset.minutes); var expected = now.toISOString().replace(/\.000/g, ''); } var actual = dateFormat(now, key); assert.strictEqual(actual, expected); done(); }); }); it('should use `default` mask, when `mask` is empty', function(done) { var now = new Date(2014, 10, 26, 13, 19, 44); var expected = expects['default']; var actual = dateFormat(now); assert.strictEqual(actual, expected); done(); }); }); node-dateformat-2.0.0/test/test_isoutcdatetime.js000066400000000000000000000005301301575335700221700ustar00rootroot00000000000000var assert = require('assert'); var dateFormat = require('./../lib/dateformat'); describe('isoUtcDateTime', function() { it('should correctly format the timezone part', function(done) { var actual = dateFormat('2014-06-02T13:23:21-08:00', 'isoUtcDateTime'); assert.strictEqual(actual, '2014-06-02T21:23:21Z'); done(); }); }); node-dateformat-2.0.0/test/weekofyear/000077500000000000000000000000001301575335700177135ustar00rootroot00000000000000node-dateformat-2.0.0/test/weekofyear/test_weekofyear.js000066400000000000000000000001771301575335700234560ustar00rootroot00000000000000var dateFormat = require('../lib/dateformat.js'); var val = process.argv[2] || new Date(); console.log(dateFormat(val, 'W')); node-dateformat-2.0.0/test/weekofyear/test_weekofyear.sh000066400000000000000000000013651301575335700234540ustar00rootroot00000000000000#!/bin/bash # this just takes php's date() function as a reference to check if week of year # is calculated correctly in the range from 1970 .. 2038 by brute force... SEQ="seq" SYSTEM=`uname` if [ "$SYSTEM" = "Darwin" ]; then SEQ="jot" fi for YEAR in {1970..2038}; do for MONTH in {1..12}; do DAYS=$(cal $MONTH $YEAR | egrep "28|29|30|31" |tail -1 |awk '{print $NF}') for DAY in $( $SEQ $DAYS ); do DATE=$YEAR-$MONTH-$DAY echo -n $DATE ... NODEVAL=$(node test_weekofyear.js $DATE) PHPVAL=$(php -r "echo intval(date('W', strtotime('$DATE')));") if [ "$NODEVAL" -ne "$PHPVAL" ]; then echo "MISMATCH: node: $NODEVAL vs php: $PHPVAL for date $DATE" else echo " OK" fi done done done