Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

chrono-node

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chrono-node - npm Package Compare versions

Comparing version 1.3.4 to 1.3.5

src/parsers/EN/ENTimeFromNowFormatParser.js

2

bower.json
{
"name": "chrono",
"main": "chrono.js",
"version": "1.3.4",
"version": "1.3.5",
"homepage": "https://github.com/wanasit/chrono",

@@ -6,0 +6,0 @@ "authors": [

@@ -10,3 +10,3 @@ {

"license": "MIT",
"version": "1.3.4",
"version": "1.3.5",
"directories": {

@@ -13,0 +13,0 @@ "source": "./src",

@@ -14,2 +14,3 @@ Chrono

* 5 days ago
* 2 weeks from now
* Sat Aug 17 2013 18:40:39 GMT+0900 (JST)

@@ -16,0 +17,0 @@ * 2014-11-30T08:15:30-05:30

@@ -132,2 +132,3 @@ var parser = require('./parsers/parser');

new parser.ENTimeAgoFormatParser(config),
new parser.ENTimeFromNowFormatParser(config),
new parser.ENTimeExpressionParser(config)

@@ -134,0 +135,0 @@ ],

@@ -57,6 +57,6 @@ /*

result.start.imply('hour', refMoment.hour());
result.start.imply('minute', refMoment.minute());
result.start.imply('second', refMoment.second());
result.start.imply('millisecond', refMoment.millisecond());
result.start.assign('hour', refMoment.hour());
result.start.assign('minute', refMoment.minute());
result.start.assign('second', refMoment.second());
result.start.assign('millisecond', refMoment.millisecond());

@@ -63,0 +63,0 @@ }

@@ -11,7 +11,15 @@ /*

var TIME_UNIT =
'(' + util.INTEGER_WORDS_PATTERN + '|[0-9]+|an?(?:\\s*few)?|half(?:\\s*an?)?)\\s*' +
'(sec(?:onds?)?|min(?:ute)?s?|hours?|weeks?|days?|months?|years?)\\s*';
var TIME_UNIT_STRICT =
'([0-9]+|an?)\\s*' +
'(seconds?|minutes?|hours?|days?)\\s*';
var PATTERN_TIME_UNIT = new RegExp(TIME_UNIT, 'i');
var PATTERN = new RegExp('' +
'(\\W|^)' +
'(?:within\\s*)?' +
'(' + util.INTEGER_WORDS_PATTERN + '|[0-9]+|an?(?:\\s*few)?|half(?:\\s*an?)?)\\s*' +
'(seconds?|min(?:ute)?s?|hours?|weeks?|days?|months?|years?)\\s*' +
'((?:' + TIME_UNIT + ')+)' +
'(?:ago|before|earlier)(?=(?:\\W|$))', 'i');

@@ -22,4 +30,3 @@

'(?:within\\s*)?' +
'([0-9]+|an?)\\s*' +
'(seconds?|minutes?|hours?|days?)\\s*' +
'((?:' + TIME_UNIT_STRICT + ')+)' +
'ago(?=(?:\\W|$))', 'i');

@@ -48,34 +55,10 @@

var num = match[2].toLowerCase() ;
if (util.INTEGER_WORDS[num] !== undefined) {
num = util.INTEGER_WORDS[num];
} else if(num === 'a' || num === 'an'){
num = 1;
} else if (num.match(/few/)) {
num = 3;
} else if (num.match(/half/)) {
num = 0.5;
} else {
num = parseInt(num);
}
var fragments = extractDateTimeUnitFragments(match[2]);
var date = moment(ref);
if (match[3].match(/hour|min|second/i)) {
if (match[3].match(/hour/i)) {
for (var key in fragments) {
date.add(-fragments[key], key);
}
date.add(-num, 'hour');
} else if (match[3].match(/min/i)) {
date.add(-num, 'minute');
} else if (match[3].match(/second/i)) {
date.add(-num, 'second');
}
result.start.imply('day', date.date());
result.start.imply('month', date.month() + 1);
result.start.imply('year', date.year());
if (fragments['hour'] > 0 || fragments['minute'] > 0 || fragments['second'] > 0) {
result.start.assign('hour', date.hour());

@@ -85,34 +68,67 @@ result.start.assign('minute', date.minute());

result.tags['ENTimeAgoFormatParser'] = true;
return result;
}
}
if (fragments['d'] > 0 || fragments['month'] > 0 || fragments['year'] > 0) {
result.start.assign('day', date.date());
result.start.assign('month', date.month() + 1);
result.start.assign('year', date.year());
} else {
if (fragments['week'] > 0) {
result.start.imply('weekday', date.day());
}
if (match[3].match(/week/i)) {
date.add(-num, 'week');
result.start.imply('day', date.date());
result.start.imply('month', date.month() + 1);
result.start.imply('year', date.year());
result.start.imply('weekday', date.day());
return result;
}
if (match[3].match(/day/i)) {
date.add(-num, 'd');
}
return result;
};
if (match[3].match(/month/i)) {
date.add(-num, 'month');
function extractDateTimeUnitFragments(timeunitText) {
var fragments = {};
var remainingText = timeunitText;
var match = PATTERN_TIME_UNIT.exec(remainingText);
while (match) {
collectDateTimeFragment(match, fragments);
remainingText = remainingText.substring(match[0].length);
match = PATTERN_TIME_UNIT.exec(remainingText);
}
return fragments;
};
if (match[3].match(/year/i)) {
function collectDateTimeFragment(match, fragments) {
date.add(-num, 'year');
var num = match[1].toLowerCase() ;
if (util.INTEGER_WORDS[num] !== undefined) {
num = util.INTEGER_WORDS[num];
} else if(num === 'a' || num === 'an'){
num = 1;
} else if (num.match(/few/)) {
num = 3;
} else if (num.match(/half/)) {
num = 0.5;
} else {
num = parseInt(num);
}
result.start.assign('day', date.date());
result.start.assign('month', date.month() + 1);
result.start.assign('year', date.year());
return result;
if (match[2].match(/hour/i)) {
fragments['hour'] = num;
} else if (match[2].match(/min/i)) {
fragments['minute'] = num;
} else if (match[2].match(/sec/i)) {
fragments['second'] = num;
} else if (match[2].match(/week/i)) {
fragments['week'] = num;
} else if (match[2].match(/day/i)) {
fragments['d'] = num;
} else if (match[2].match(/month/i)) {
fragments['month'] = num;
} else if (match[2].match(/year/i)) {
fragments['year'] = num;
}
};
return fragments;
}
}

@@ -67,2 +67,3 @@

exports.ENTimeExpressionParser = require('./EN/ENTimeExpressionParser').Parser;
exports.ENTimeFromNowFormatParser = require('./EN/ENTimeFromNowFormatParser').Parser;
exports.ENWeekdayParser = require('./EN/ENWeekdayParser').Parser;

@@ -69,0 +70,0 @@ exports.ENCasualDateParser = require('./EN/ENCasualDateParser').Parser;

@@ -58,2 +58,4 @@ /*

if (!this.isWeekdayResult(fromResult) && !this.isWeekdayResult(toResult)) {
var timeKeys = {'hour': true, 'minute': true, 'second': true};

@@ -74,5 +76,21 @@ for (var key in toResult.start.knownValues) {

if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {
var tmp = toResult;
toResult = fromResult;
fromResult = tmp;
var fromMoment = fromResult.start.moment();
var toMoment = toResult.start.moment();
if (this.isWeekdayResult(fromResult) && fromMoment.clone().add(-7, 'days').isBefore(toMoment)) {
fromMoment = fromMoment.add(-7, 'days');
fromResult.start.imply('day', fromMoment.date());
fromResult.start.imply('month', fromMoment.month() + 1);
fromResult.start.imply('year', fromMoment.year());
} else if (this.isWeekdayResult(toResult) && toMoment.clone().add(7, 'days').isAfter(fromMoment)) {
toMoment = toMoment.add(7, 'days');
toResult.start.imply('day', toMoment.date());
toResult.start.imply('month', toMoment.month() + 1);
toResult.start.imply('year', toMoment.year());
} else {
var tmp = toResult;
toResult = fromResult;
fromResult = tmp;
}
}

@@ -79,0 +97,0 @@

@@ -347,2 +347,31 @@ // QUnit Setup

test("Test - Nested time ago", function() {
var text = "15 hours 29 min ago";
var results = chrono.parse(text, new Date(2012,7,10,22,30));
ok(results.length == 1, JSON.stringify( results ) );
ok(results[0].text == '15 hours 29 min ago', text);
ok(results[0].start.get('day') == 10, text);
ok(results[0].start.get('hour') == 7, text);
ok(results[0].start.get('minute') == 1, text);
var text = "1 day 21 hours ago ";
var results = chrono.parse(text, new Date(2012,7,10,22,30));
ok(results.length == 1, JSON.stringify( results ) );
ok(results[0].text == '1 day 21 hours ago', text);
ok(results[0].start.get('day') == 9, text);
ok(results[0].start.get('hour') == 1, text);
ok(results[0].start.get('minute') == 30, text);
var text = "3 min 49 sec ago ";
var results = chrono.parse(text, new Date(2012,7,10,22,30));
ok(results.length == 1, JSON.stringify( results ) );
ok(results[0].text == '3 min 49 sec ago', text);
ok(results[0].start.get('day') == 10, text);
ok(results[0].start.get('hour') == 22, text);
ok(results[0].start.get('minute') == 26, text);
ok(results[0].start.get('second') == 11, text);
});
test("Test - Single Expression (Strict)", function() {

@@ -349,0 +378,0 @@

@@ -128,2 +128,34 @@ // QUnit Setup

var text = "Monday afternoon to last night";
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'Monday afternoon to last night', JSON.stringify(results));
ok(results[0].start.get('day') == 3, JSON.stringify(results));
ok(results[0].start.get('month') == 7, JSON.stringify(results));
var text = "tonight to Thursday";
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'tonight to Thursday', JSON.stringify(results));
ok(results[0].end.get('day') == 13, JSON.stringify(results));
ok(results[0].end.get('month') == 7, JSON.stringify(results));
var text = 'August 12, 2015 to 13 September';
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'August 12, 2015 to 13 September', JSON.stringify(results));
ok(results[0].end.get('day') == 13, JSON.stringify(results));
ok(results[0].end.get('month') == 9, JSON.stringify(results));
ok(results[0].end.get('year') == 2015, JSON.stringify(results));
var text = 'from 10am to now';
var results = chrono.parse(text, new Date(2017, 7-1, 7, 15));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'from 10am to now', JSON.stringify(results));
ok(results[0].end.get('hour') == 15, JSON.stringify(results));
ok(results[0].end.get('minute') == 0, JSON.stringify(results));
})

@@ -130,0 +162,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc