Socket
Socket
Sign inDemoInstall

date-and-time

Package Overview
Dependencies
0
Maintainers
1
Versions
55
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.10.0 to 0.11.0

benchmark/bench.js

47

date-and-time.js

@@ -156,19 +156,32 @@ /**

/**
* compiling a format string for the parser
* @param {string} formatString - a format string
* @returns {Array.<string>} a compiled object
*/
date.compile = function (formatString) {
var re = /([A-Za-z])\1*|./g, keys, pattern = [formatString];
formatString = formatString.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]/g, function (str) {
return str.replace(/./g, ' ').slice(2);
});
while ((keys = re.exec(formatString))) {
pattern[pattern.length] = keys[0];
}
return pattern;
};
/**
* pre-parsing a date string
* @param {string} dateString - a date string
* @param {string} formatString - a format string
* @param {string|Array.<string>} arg - a format string or a compiled object
* @returns {Object} a date structure
*/
date.preparse = function (dateString, formatString) {
var parser = locales[lang].parser,
re = /([A-Za-z])\1*|./g,
keys, token, result, offset = 0,
date.preparse = function (dateString, arg) {
var parser = locales[lang].parser, token, result, offset = 0,
pattern = typeof arg === 'string' ? date.compile(arg) : arg, formatString = pattern[0],
dt = { Y: 1970, M: 1, D: 1, H: 0, A: 0, h: 0, m: 0, s: 0, S: 0, _index: 0, _length: 0, _match: 0 };
dateString = parser.pre(dateString);
formatString = formatString.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]/g, function (str) {
return str.replace(/./g, ' ').slice(2);
});
while ((keys = re.exec(formatString))) {
token = keys[0];
for (var i = 1, len = pattern.length; i < len; i++) {
token = pattern[i];
if (parser[token]) {

@@ -196,8 +209,8 @@ result = parser[token](dateString.slice(offset), formatString);

* validation
* @param {Object|string} arg - a date structure or a date string
* @param {string} [formatString] - a format string
* @param {Object|string} arg1 - a date structure or a date string
* @param {string|Array.<string>} [arg2] - a format string or a compiled object
* @returns {boolean} whether the date string is a valid date
*/
date.isValid = function (arg, formatString) {
var dt = typeof arg === 'string' ? date.preparse(arg, formatString) : arg,
date.isValid = function (arg1, arg2) {
var dt = typeof arg1 === 'string' ? date.preparse(arg1, arg2) : arg1,
last = [31, 28 + date.isLeapYear(dt.Y) | 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][dt.M - 1];

@@ -215,8 +228,8 @@

* @param {string} dateString - a date string
* @param {string} formatString - a format string
* @param {string|Array.<string>} arg - a format string or a compiled object
* @param {boolean} [utc] - input as UTC
* @returns {Date} a constructed date
*/
date.parse = function (dateString, formatString, utc) {
var dt = date.preparse(dateString, formatString), dateObj;
date.parse = function (dateString, arg, utc) {
var dt = date.preparse(dateString, arg), dateObj;

@@ -223,0 +236,0 @@ if (date.isValid(dt)) {

/*
date-and-time.js (c) KNOWLEDGECODE | MIT
*/
(function(p){var d={},l={},g={},h="en",q={MMMM:"January February March April May June July August September October November December".split(" "),MMM:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),dddd:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["a.m.","p.m."]},r={YYYY:function(a){return("000"+a.getFullYear()).slice(-4)},YY:function(a){return("0"+a.getFullYear()).slice(-2)},
(function(r){var b={},m={},k={},h="en",t={MMMM:"January February March April May June July August September October November December".split(" "),MMM:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),dddd:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ddd:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dd:"Su Mo Tu We Th Fr Sa".split(" "),A:["a.m.","p.m."]},u={YYYY:function(a){return("000"+a.getFullYear()).slice(-4)},YY:function(a){return("0"+a.getFullYear()).slice(-2)},
Y:function(a){return""+a.getFullYear()},MMMM:function(a){return this.res.MMMM[a.getMonth()]},MMM:function(a){return this.res.MMM[a.getMonth()]},MM:function(a){return("0"+(a.getMonth()+1)).slice(-2)},M:function(a){return""+(a.getMonth()+1)},DD:function(a){return("0"+a.getDate()).slice(-2)},D:function(a){return""+a.getDate()},HH:function(a){return("0"+a.getHours()).slice(-2)},H:function(a){return""+a.getHours()},A:function(a){return this.res.A[11<a.getHours()|0]},hh:function(a){return("0"+(a.getHours()%
12||12)).slice(-2)},h:function(a){return""+(a.getHours()%12||12)},mm:function(a){return("0"+a.getMinutes()).slice(-2)},m:function(a){return""+a.getMinutes()},ss:function(a){return("0"+a.getSeconds()).slice(-2)},s:function(a){return""+a.getSeconds()},SSS:function(a){return("00"+a.getMilliseconds()).slice(-3)},SS:function(a){return("0"+(a.getMilliseconds()/10|0)).slice(-2)},S:function(a){return""+(a.getMilliseconds()/100|0)},dddd:function(a){return this.res.dddd[a.getDay()]},ddd:function(a){return this.res.ddd[a.getDay()]},
dd:function(a){return this.res.dd[a.getDay()]},Z:function(a){a=a.utc?0:a.getTimezoneOffset()/.6;return(0<a?"-":"+")+("000"+Math.abs(a-a%100*.4)).slice(-4)},post:function(a){return a}},t={YYYY:function(a){return this.exec(/^\d{4}/,a)},YY:function(a){a=this.exec(/^\d\d/,a);a.value+=70>a.value?2E3:100>a.value?1900:0;return a},Y:function(a){return this.exec(/^\d{1,4}/,a)},MMMM:function(a){a=this.find(this.res.MMMM,a);a.value++;return a},MMM:function(a){a=this.find(this.res.MMM,a);a.value++;return a},
dd:function(a){return this.res.dd[a.getDay()]},Z:function(a){a=a.utc?0:a.getTimezoneOffset()/.6;return(0<a?"-":"+")+("000"+Math.abs(a-a%100*.4)).slice(-4)},post:function(a){return a}},w={YYYY:function(a){return this.exec(/^\d{4}/,a)},YY:function(a){a=this.exec(/^\d\d/,a);a.value+=70>a.value?2E3:100>a.value?1900:0;return a},Y:function(a){return this.exec(/^\d{1,4}/,a)},MMMM:function(a){a=this.find(this.res.MMMM,a);a.value++;return a},MMM:function(a){a=this.find(this.res.MMM,a);a.value++;return a},
MM:function(a){return this.exec(/^\d\d/,a)},M:function(a){return this.exec(/^\d\d?/,a)},DD:function(a){return this.exec(/^\d\d/,a)},D:function(a){return this.exec(/^\d\d?/,a)},HH:function(a){return this.exec(/^\d\d/,a)},H:function(a){return this.exec(/^\d\d?/,a)},A:function(a){return this.find(this.res.A,a)},hh:function(a){return this.exec(/^\d\d/,a)},h:function(a){return this.exec(/^\d\d?/,a)},mm:function(a){return this.exec(/^\d\d/,a)},m:function(a){return this.exec(/^\d\d?/,a)},ss:function(a){return this.exec(/^\d\d/,
a)},s:function(a){return this.exec(/^\d\d?/,a)},SSS:function(a){return this.exec(/^\d{1,3}/,a)},SS:function(a){a=this.exec(/^\d\d?/,a);a.value*=10;return a},S:function(a){a=this.exec(/^\d/,a);a.value*=100;return a},h12:function(a,c){return(12===a?0:a)+12*c},exec:function(a,c){var b=(a.exec(c)||[""])[0];return{value:b|0,length:b.length}},find:function(a,c){for(var b=-1,d=0,e=0,k=a.length,f;e<k;e++)f=a[e],!c.indexOf(f)&&f.length>d&&(b=e,d=f.length);return{value:b,length:d}},pre:function(a){return a}},
n=function(a,c,b){var d=function(a,b,c){var d=function(a){a&&(this.res=a)};d.prototype=a;d.prototype.constructor=d;a=new d(c);for(var e in b||{})b.hasOwnProperty(e)&&(c=b[e],a[e]=c.slice?c.slice():c);return a},e={res:d(c.res,b.res)};e.formatter=d(c.formatter,b.formatter,e.res);e.parser=d(c.parser,b.parser,e.res);l[a]=e};d.format=function(a,c,b){var m=d.addMinutes(a,b?a.getTimezoneOffset():0),e=l[h].formatter;m.utc=b;return c.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]|([A-Za-z])\1*|./g,function(a){return e[a]?
e.post(e[a](m,c)):a.replace(/\[(.*)]/,"$1")})};d.preparse=function(a,c){var b=l[h].parser,d=/([A-Za-z])\1*|./g,e,k=0,f={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,_index:0,_length:0,_match:0};a=b.pre(a);for(c=c.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]/g,function(a){return a.replace(/./g," ").slice(2)});e=d.exec(c);)if(e=e[0],b[e]){var g=b[e](a.slice(k),c);if(!g.length)break;k+=g.length;f[e.charAt(0)]=g.value;f._match++}else if(e===a.charAt(k)||" "===e)k++;else break;f.H=f.H||b.h12(f.h,f.A);f._index=k;f._length=
a.length;return f};d.isValid=function(a,c){var b="string"===typeof a?d.preparse(a,c):a,g=[31,28+d.isLeapYear(b.Y)|0,31,30,31,30,31,31,30,31,30,31][b.M-1];return!(1>b._index||1>b._length||b._index-b._length||1>b._match||1>b.Y||9999<b.Y||1>b.M||12<b.M||1>b.D||b.D>g||23<b.H||0>b.H||59<b.m||0>b.m||59<b.s||0>b.s||999<b.S||0>b.S)};d.parse=function(a,c,b){a=d.preparse(a,c);return d.isValid(a)?(a.M-=100>a.Y?22801:1,b=b?new Date(Date.UTC(a.Y,a.M,a.D,a.H,a.m,a.s,a.S)):new Date(a.Y,a.M,a.D,a.H,a.m,a.s,a.S)):
new Date(NaN)};d.addYears=function(a,c){return d.addMonths(a,12*c)};d.addMonths=function(a,c){var b=new Date(a.getTime());b.setMonth(b.getMonth()+c);return b};d.addDays=function(a,c){var b=new Date(a.getTime());b.setDate(b.getDate()+c);return b};d.addHours=function(a,c){return d.addMilliseconds(a,36E5*c)};d.addMinutes=function(a,c){return d.addMilliseconds(a,6E4*c)};d.addSeconds=function(a,c){return d.addMilliseconds(a,1E3*c)};d.addMilliseconds=function(a,c){return new Date(a.getTime()+c)};d.subtract=
function(a,c){var b=a.getTime()-c.getTime();return{toMilliseconds:function(){return b},toSeconds:function(){return b/1E3|0},toMinutes:function(){return b/6E4|0},toHours:function(){return b/36E5|0},toDays:function(){return b/864E5|0}}};d.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};d.isSameDay=function(a,c){return d.format(a,"YYYYMMDD")===d.format(c,"YYYYMMDD")};d.locale=function(a,c){c?n(a,{res:q,formatter:r,parser:t},c):a&&(h=a);return h};d.extend=function(a){n(h,l[h],a)};d.plugin=function(a,
c){g[a]=g[a]||c;!c&&g[a]&&d.extend(g[a])};d.locale(h,{});"object"===typeof module&&"object"===typeof module.exports?module.exports=d:"function"===typeof define&&define.amd?define([],function(){return d}):p.date=d})(this);
a)},s:function(a){return this.exec(/^\d\d?/,a)},SSS:function(a){return this.exec(/^\d{1,3}/,a)},SS:function(a){a=this.exec(/^\d\d?/,a);a.value*=10;return a},S:function(a){a=this.exec(/^\d/,a);a.value*=100;return a},h12:function(a,d){return(12===a?0:a)+12*d},exec:function(a,d){var c=(a.exec(d)||[""])[0];return{value:c|0,length:c.length}},find:function(a,d){for(var c=-1,b=0,e=0,v=a.length,f;e<v;e++)f=a[e],!d.indexOf(f)&&f.length>b&&(c=e,b=f.length);return{value:c,length:b}},pre:function(a){return a}},
n=function(a,d,c){var b=function(a,c,d){var b=function(a){a&&(this.res=a)};b.prototype=a;b.prototype.constructor=b;a=new b(d);for(var e in c||{})c.hasOwnProperty(e)&&(d=c[e],a[e]=d.slice?d.slice():d);return a},e={res:b(d.res,c.res)};e.formatter=b(d.formatter,c.formatter,e.res);e.parser=b(d.parser,c.parser,e.res);m[a]=e};b.format=function(a,d,c){var g=b.addMinutes(a,c?a.getTimezoneOffset():0),e=m[h].formatter;g.utc=c;return d.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]|([A-Za-z])\1*|./g,function(a){return e[a]?
e.post(e[a](g,d)):a.replace(/\[(.*)]/,"$1")})};b.compile=function(a){var d=/([A-Za-z])\1*|./g,c,b=[a];for(a=a.replace(/\[[^\[\]]*]|\[.*\][^\[]*\]/g,function(a){return a.replace(/./g," ").slice(2)});c=d.exec(a);)b[b.length]=c[0];return b};b.preparse=function(a,d){var c=m[h].parser,g=0,e="string"===typeof d?b.compile(d):d,k=e[0],f={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,_index:0,_length:0,_match:0};a=c.pre(a);for(var p=1,n=e.length;p<n;p++){var l=e[p];if(c[l]){var q=c[l](a.slice(g),k);if(!q.length)break;
g+=q.length;f[l.charAt(0)]=q.value;f._match++}else if(l===a.charAt(g)||" "===l)g++;else break}f.H=f.H||c.h12(f.h,f.A);f._index=g;f._length=a.length;return f};b.isValid=function(a,d){var c="string"===typeof a?b.preparse(a,d):a,g=[31,28+b.isLeapYear(c.Y)|0,31,30,31,30,31,31,30,31,30,31][c.M-1];return!(1>c._index||1>c._length||c._index-c._length||1>c._match||1>c.Y||9999<c.Y||1>c.M||12<c.M||1>c.D||c.D>g||23<c.H||0>c.H||59<c.m||0>c.m||59<c.s||0>c.s||999<c.S||0>c.S)};b.parse=function(a,d,c){a=b.preparse(a,
d);return b.isValid(a)?(a.M-=100>a.Y?22801:1,c=c?new Date(Date.UTC(a.Y,a.M,a.D,a.H,a.m,a.s,a.S)):new Date(a.Y,a.M,a.D,a.H,a.m,a.s,a.S)):new Date(NaN)};b.addYears=function(a,d){return b.addMonths(a,12*d)};b.addMonths=function(a,b){var c=new Date(a.getTime());c.setMonth(c.getMonth()+b);return c};b.addDays=function(a,b){var c=new Date(a.getTime());c.setDate(c.getDate()+b);return c};b.addHours=function(a,d){return b.addMilliseconds(a,36E5*d)};b.addMinutes=function(a,d){return b.addMilliseconds(a,6E4*
d)};b.addSeconds=function(a,d){return b.addMilliseconds(a,1E3*d)};b.addMilliseconds=function(a,b){return new Date(a.getTime()+b)};b.subtract=function(a,b){var c=a.getTime()-b.getTime();return{toMilliseconds:function(){return c},toSeconds:function(){return c/1E3|0},toMinutes:function(){return c/6E4|0},toHours:function(){return c/36E5|0},toDays:function(){return c/864E5|0}}};b.isLeapYear=function(a){return!(a%4)&&!!(a%100)||!(a%400)};b.isSameDay=function(a,d){return b.format(a,"YYYYMMDD")===b.format(d,
"YYYYMMDD")};b.locale=function(a,b){b?n(a,{res:t,formatter:u,parser:w},b):a&&(h=a);return h};b.extend=function(a){n(h,m[h],a)};b.plugin=function(a,d){k[a]=k[a]||d;!d&&k[a]&&b.extend(k[a])};b.locale(h,{});"object"===typeof module&&"object"===typeof module.exports?module.exports=b:"function"===typeof define&&define.amd?define([],function(){return b}):r.date=b})(this);
{
"name": "date-and-time",
"version": "0.10.0",
"version": "0.11.0",
"description": "A Minimalist DateTime utility for Node.js and the browser",

@@ -5,0 +5,0 @@ "main": "date-and-time.js",

@@ -109,3 +109,3 @@ # Plugins

- It is not able to add new alphabet's token to the parser.
- To the parser, it is not able to add new alphabet's token.

@@ -115,3 +115,3 @@ ```javascript

'YYY' // This is OK because a `Y` token is existing in the parser.
'SSS' // This is modifying, not adding because the same token is existing.
'SSS' // This is modifying, not adding. Because the same token is existing.
```

@@ -192,2 +192,19 @@

### WIP
---
## Direct Replacement
All you are enough to change a bit the default behavior of this library? You are not going to write a plugin? Of course, you could replace the default behavior directly like this:
```javascript
date.format(new Date(), 'hh:mm A'); // => 11:20 p.m.
// Replace the words that a.m./p.m. to AM/PM.
date.extend({ res: { A: ['AM', 'PM'] } });
date.format(new Date(), 'hh:mm A'); // => 11:20 PM
```
### Hint
The `extend()` can be regarded as an unnamed `plugin()`.

@@ -5,3 +5,3 @@ # date-and-time

This library is just a function collection for manipulating JS date and time. It's tiny, simple, easy to learn.
This library is a minimalist collection of functions for manipulating JS date and time. It's tiny, simple, easy to learn.

@@ -15,5 +15,5 @@ ## Why

- Minimalist. Less than 2k. (minified and gzipped)
- Extensible. Plugin system support.
- Multi language support.
- Universal / Isomorphic. Wherever JS runtime works.
- Multi language support.
- Not extending built-in Date object.
- Older browser support. Even works on IE6. :)

@@ -37,2 +37,27 @@

- 0.11.0
- Added a `compile()` function that precompiling a date string for the parser. In case of processing many date string with one format, by using this function, you could be able to get results faster than before.
```javascript
// We have passed a string format at the 2nd parameter every time when calling the parse() function.
date.parse('Mar. 22 2019 2:54:21 p.m.', 'MMM. D YYYY h:m:s A');
date.parse('Jul. 27 2019 4:15:24 a.m.', 'MMM. D YYYY h:m:s A');
date.parse('Dec. 25 2019 3:51:11 a.m.', 'MMM. D YYYY h:m:s A');
// You can precompile the string format.
const pattern = date.compile('MMM. D YYYY h:m:s A');
// The parse() will be able to finish faster than passing the format string every time.
date.parse('Mar. 22 2019 2:54:21 p.m.', pattern);
date.parse('Jul. 27 2019 4:15:24 a.m.', pattern);
date.parse('Dec. 25 2019 3:51:11 a.m.', pattern);
```
```javascript
const pattern = date.compile('MMM. D YYYY h:m:s A');
// The isValid() will also too.
date.isValid('Mar. 22 2019 2:54:21 p.m.', pattern);
```
- 0.10.0

@@ -56,4 +81,4 @@ - The `YYYY` token has come to require 4 digits in the `parse()`, the `preparse()` and the `isValid()` (**Breaking Change**).

```javascript
date.parse('31-12-123', 'DD-MM-Y'); // good
date.parse('31-12-3', 'DD-MM-Y'); // good
date.parse('31-12-123', 'DD-MM-Y'); // Good
date.parse('31-12-3', 'DD-MM-Y'); // Good
```

@@ -170,7 +195,25 @@

### parse(dateString, formatString[, utc])
### compile(formatString)
- Compiling a format string for the parser.
- @param {**string**} formatString - a format string
- @returns {**Array.\<string\>**} a compiled object
```javascript
const pattern = date.compile('MMM. D YYYY h:m:s A');
date.parse('Mar. 22 2019 2:54:21 p.m.', pattern);
date.parse('Jul. 27 2019 4:15:24 a.m.', pattern);
date.parse('Dec. 25 2019 3:51:11 a.m.', pattern);
```
If you are going to call the `parse()` or the `isValid()` many times with one string format, recommended to precompile and reuse it for performance.
---
### parse(dateString, arg[, utc])
- Parsing a date string.
- @param {**string**} dateString - a date string
- @param {**string**} formatString - a format string
- @param {**string|Array.\<string\>**} arg - a format string or a compiled object
- @param {**boolean**} [utc] - input as UTC

@@ -299,7 +342,7 @@ - @returns {**Date**} a constructed date

### preparse(dateString, formatString)
### preparse(dateString, arg)
- Pre-parsing a date string.
- @param {**string**} dateString - a date string
- @param {**string**} formatString - a format string
- @param {**string|Array.\<string\>**} arg - a format string or a compiled object
- @returns {**Object**} a date structure

@@ -328,11 +371,11 @@

This object shows a parsing result. You will be able to tell from it how the date string was parsed(, or why the parsing was failed).
This object shows a parsing result. You would be able to tell from it how the date string was parsed(, or why the parsing was failed).
---
### isValid(arg[, formatString])
### isValid(arg1[, arg2])
- Validation.
- @param {**Object**|**string**} arg - a date structure or a date string
- @param {**string**} [formatString] - a format string
- @param {**Object|string**} arg1 - a date structure or a date string
- @param {**string|Array.\<string\>**} [arg2] - a format string or a compiled object
- @returns {**boolean**} whether the date string is a valid date

@@ -339,0 +382,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc