chrono-node
Advanced tools
Comparing version 1.3.4 to 1.3.5
{ | ||
"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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2513561
132
28070
283