Comparing version 0.3.1 to 1.0.1
124
index.js
@@ -1,10 +0,7 @@ | ||
var fs = require('fs') | ||
, langs = require('./lang') | ||
/** | ||
* Set default language | ||
*/ | ||
// Set the default language | ||
var lang = langs['en-us']; | ||
var lang = require('./lang/en-us'); | ||
// RegExp to tokenize a format string | ||
var TOKENS = /Y{2,4}|[Md]{1,4}|[DHhms]{1,2}|[Aa]|"[^"]*"|'[^']*'/g; | ||
/** | ||
@@ -21,5 +18,6 @@ * Format date | ||
var date = toObject(date); | ||
var re = /Y{2,4}|[Md]{1,4}|[DHhms]{1,2}|[Aa]|"[^"]*"|'[^']*'/g; | ||
format = formats[format] || format; | ||
return format.replace(TOKENS, function (part) { | ||
return format.replace(re, function (part) { | ||
switch (part) { | ||
@@ -70,6 +68,12 @@ case 'YYYY': | ||
// Backwards compatibility | ||
/** | ||
* Alias formatter | ||
*/ | ||
dateable.format = dateable; | ||
// Available units | ||
/** | ||
* Units | ||
*/ | ||
var units = dateable.units = { | ||
@@ -85,3 +89,7 @@ years : 31536000000 | ||
// Stored formats | ||
/** | ||
* Stored formats | ||
*/ | ||
var formats = dateable.formats = {}; | ||
@@ -92,24 +100,23 @@ | ||
* | ||
* @param {String|Object} language | ||
* @param {String|Object} name | ||
* @api public | ||
*/ | ||
dateable.language = function (language) { | ||
if (typeof language !== 'string') { | ||
lang = language; | ||
} else if (langs[language]) { | ||
lang = langs[language]; | ||
dateable.language = function (name) { | ||
// object | ||
if (typeof name != 'string') { | ||
lang = name; | ||
return; | ||
} | ||
return this; | ||
// string | ||
try { | ||
lang = require('./lang/' + name); | ||
} catch (e) { | ||
throw new Error('language does not exist'); | ||
} | ||
}; | ||
// Backwards compatibility | ||
dateable.setLang = dateable.language; | ||
// Tokenizer for a formatted date | ||
var TOKENIZER = /Y{2,4}|[Md]{1,4}|[DHhms]{1,2}|[Aa]/g ; | ||
/** | ||
* Parse string from format to date | ||
* Parse a date string | ||
* | ||
@@ -123,7 +130,9 @@ * @param {String} string | ||
dateable.parse = function (string, format) { | ||
var offset = 0 | ||
, parts = {} | ||
, token; | ||
var re = /Y{2,4}|[Md]{1,4}|[DHhms]{1,2}|[Aa]/g; | ||
var offset = 0; | ||
var parts = {}; | ||
var token; | ||
format = formats[format] || format; | ||
// Strip the string from the escaped parts of the format | ||
@@ -137,6 +146,6 @@ format = format.replace(/"[^"]*"|'[^']*'/g, function (str) { | ||
while (token = TOKENIZER.exec(format)) { | ||
while (token = re.exec(format)) { | ||
var index = token.index + offset | ||
, tokenLength = token[0].length | ||
, part = string.substr(index, tokenLength); | ||
var tokenLength = token[0].length | ||
var part = string.substr(index, tokenLength); | ||
@@ -155,5 +164,3 @@ index += tokenLength - 1; | ||
while (++index < stringLength) { | ||
if (!(/\d|\w/).test(string[index])) | ||
break; | ||
if (!(/\d|\w/).test(string[index])) break; | ||
part += string[index]; | ||
@@ -164,6 +171,7 @@ } | ||
if (/[Md]{3,4}/.test(token[0])) | ||
if (/[Md]{3,4}/.test(token[0])) { | ||
part = lang[token[0]].indexOf(part); | ||
else if (token[0][0] === 'M') | ||
} else if (token[0][0] === 'M') { | ||
part--; | ||
} | ||
@@ -186,4 +194,5 @@ parts[token[0][0]] = part; | ||
dateable.when = function (date, unit) { | ||
var diff = date.valueOf() - Date.now() | ||
, time = 'present' | ||
var now = new Date(); | ||
var diff = date.valueOf() - now.valueOf(); | ||
var time = 'present'; | ||
@@ -193,4 +202,5 @@ unit = unit || determineUnit(diff); | ||
if (diff !== 0) | ||
if (diff !== 0) { | ||
time = diff < 0 ? 'past' : 'future'; | ||
} | ||
@@ -214,3 +224,3 @@ diff = Math.abs(diff); | ||
var diff = start.valueOf() - end.valueOf() | ||
, unit = unit || determineUnit(diff) | ||
var unit = unit || determineUnit(diff) | ||
@@ -271,2 +281,3 @@ diff = Math.abs(Math.round(diff / units[unit])) | ||
* Format string | ||
* | ||
* @param {String} str | ||
@@ -280,5 +291,3 @@ * @return {String} | ||
return str.replace(/(%[djs])/g, function (match) { | ||
return args.length | ||
? args.shift() | ||
: match; | ||
return args.length ? args.shift() : match; | ||
}); | ||
@@ -296,4 +305,4 @@ } | ||
function toDate (obj) { | ||
var date = new Date(0) | ||
, abbr = obj.a || obj.A | ||
var date = new Date(0); | ||
var abbr = obj.a || obj.A; | ||
@@ -303,5 +312,5 @@ // Handle AM/PM | ||
abbr = abbr.toLowerCase(); | ||
if (abbr == 'pm' && obj.H < 12) | ||
if (abbr == 'pm' && obj.H < 12) { | ||
obj.h = obj.H + 12; | ||
} | ||
} | ||
@@ -311,6 +320,7 @@ | ||
if (obj.Y && obj.Y.length == 2) { | ||
if (parseInt(obj.Y, 10) > 50) | ||
if (parseInt(obj.Y, 10) > 50) { | ||
obj.Y = '19' + obj.Y; | ||
else | ||
} else { | ||
obj.Y = '20' + obj.Y; | ||
} | ||
} | ||
@@ -338,9 +348,9 @@ | ||
var obj = { | ||
Y: date.getFullYear() | ||
, M: date.getMonth() | ||
, D: date.getDate() | ||
, d: date.getDay() | ||
, h: date.getHours() | ||
, m: date.getMinutes() | ||
, s: date.getSeconds() | ||
Y: date.getFullYear(), | ||
M: date.getMonth(), | ||
D: date.getDate(), | ||
d: date.getDay(), | ||
h: date.getHours(), | ||
m: date.getMinutes(), | ||
s: date.getSeconds() | ||
}; | ||
@@ -347,0 +357,0 @@ |
{ | ||
"name": "dateable", | ||
"description": "A date formatter and parser for node", | ||
"version": "0.3.1", | ||
"author": "Eivind Fjeldstad", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/eivindfjeldstad/dateable.git" | ||
}, | ||
"keywords": ["date","dates","parser","parsing","format","formatter"], | ||
"scirpts": { | ||
"test": "node test" | ||
} | ||
"name": "dateable", | ||
"description": "A date formatter and parser for node", | ||
"version": "1.0.1", | ||
"author": "Eivind Fjeldstad", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/eivindfjeldstad/dateable.git" | ||
}, | ||
"keywords": ["date","dates","parser","parsing","format","formatter"], | ||
"scirpts": { | ||
"test": "node test" | ||
} | ||
} |
@@ -1,5 +0,6 @@ | ||
[](http://travis-ci.org/eivindfjeldstad/dateable) | ||
# dateable | ||
A small library that provides a few very useful methods for displaying dates, including a formatter and a parser. | ||
[](http://travis-ci.org/eivindfjeldstad/dateable) | ||
## Install | ||
@@ -47,12 +48,12 @@ $ npm install dateable | ||
### dateable#parse(date, format) | ||
### .parse(date, format) | ||
Return original date from format | ||
### dateable#when(date, [unit]) | ||
### .when(date, [unit]) | ||
Returns relative date | ||
### dateable#diff(start, end, [unit]) | ||
### .diff(start, end, [unit]) | ||
Returns the difference between the two dates | ||
### dateable#language(language) | ||
### .language(name) | ||
Set language | ||
@@ -59,0 +60,0 @@ |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
447
1
64
11557