Skip to content

Commit

Permalink
Merge pull request #313 from wanasit/moment-to-dayjs
Browse files Browse the repository at this point in the history
Moment to dayjs
  • Loading branch information
wanasit committed Jan 13, 2020
2 parents a292f3c + 971a30d commit ca12dfc
Show file tree
Hide file tree
Showing 60 changed files with 959 additions and 6,170 deletions.
5,800 changes: 451 additions & 5,349 deletions chrono.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion chrono.map.json

Large diffs are not rendered by default.

229 changes: 114 additions & 115 deletions chrono.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -11,7 +11,7 @@
"testURL": "http://localhost/"
},
"license": "MIT",
"version": "1.3.11",
"version": "1.4.1",
"directories": {
"source": "./src",
"test": "./test"
Expand All @@ -32,6 +32,6 @@
"coveralls": "npm run test && cat coverage/lcov.info | coveralls"
},
"dependencies": {
"moment": "^2.21.0"
"dayjs": "^1.8.19"
}
}
39 changes: 18 additions & 21 deletions src/parsers/de/DECasualDateParser.js
@@ -1,9 +1,4 @@
/*
*/

var moment = require('moment');
var dayjs = require('dayjs');
var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;

Expand All @@ -25,43 +20,45 @@ exports.Parser = function DECasualDateParser() {
this.pattern = function() { return PATTERN; }

this.extract = function(text, ref, match, opt) {
var text = match[0].substr(match[1].length);
var index = match.index + match[1].length;
var result = new ParsedResult({
text = match[0].substr(match[1].length);

const index = match.index + match[1].length;
const result = new ParsedResult({
index: index,
text: text,
ref: ref,
});

var refMoment = moment(ref);
var startMoment = refMoment.clone();
var lowerText = text.toLowerCase();
const refMoment = dayjs(ref);
const lowerText = text.toLowerCase();

var startMoment = refMoment;

if (/(?:heute|diese)\s*nacht/.test(lowerText)) {
// Normally means this coming midnight
result.start.imply('hour', 22);
result.start.imply('meridiem', 1);
} else if (/^(?:ü|ue)bermorgen/.test(lowerText)) {
startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
startMoment = startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
} else if (/^morgen/.test(lowerText)) {
// Check not "Tomorrow" on late night
if (refMoment.hour() > 1) {
startMoment.add(1, 'day');
startMoment = startMoment.add(1, 'day');
}
} else if (/^gestern/.test(lowerText)) {
startMoment.add(-1, 'day');
startMoment = startMoment.add(-1, 'day');
} else if (/^vorgestern/.test(lowerText)) {
startMoment.add(-2, 'day');
startMoment = startMoment.add(-2, 'day');
} else if (/letzte\s*nacht/.test(lowerText)) {
result.start.imply('hour', 0);
if (refMoment.hour() > 6) {
startMoment.add(-1, 'day');
startMoment = startMoment.add(-1, 'day');
}
} else if (lowerText === 'jetzt') {
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.imply('hour', refMoment.hour());
result.start.imply('minute', refMoment.minute());
result.start.imply('second', refMoment.second());
result.start.imply('millisecond', refMoment.millisecond());
}

var secondMatch = match[3] || match[4] || match[5];
Expand Down
18 changes: 9 additions & 9 deletions src/parsers/de/DEDeadlineFormatParser.js
Expand Up @@ -3,7 +3,7 @@
*/

var moment = require('moment');
var dayjs = require('dayjs');
var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;
var util = require('../../utils/DE');
Expand Down Expand Up @@ -54,17 +54,17 @@ exports.Parser = function DEDeadlineFormatParser(){
num = parseInt(num);
}

var date = moment(ref);
var date = dayjs(ref);
if (/tag|woche|monat|jahr/i.test(match[4])) {

if (/tag/i.test(match[4])) {
date.add(num, 'd');
date = date.add(num, 'd');
} else if (/woche/i.test(match[4])) {
date.add(num * 7, 'd');
date = date.add(num * 7, 'd');
} else if (/monat/i.test(match[4])) {
date.add(num, 'month');
date = date.add(num, 'month');
} else if (/jahr/i.test(match[4])) {
date.add(num, 'year');
date = date.add(num, 'year');
}

result.start.assign('year', date.year());
Expand All @@ -75,15 +75,15 @@ exports.Parser = function DEDeadlineFormatParser(){

if (/stunde/i.test(match[4])) {

date.add(num, 'hour');
date = date.add(num, 'hour');

} else if (/min/i.test(match[4])) {

date.add(num, 'minute');
date = date.add(num, 'minute');

} else if (/sekunde/i.test(match[4])) {

date.add(num, 'second');
date = date.add(num, 'second');
}

result.start.imply('year', date.year());
Expand Down
51 changes: 15 additions & 36 deletions src/parsers/de/DEMonthNameLittleEndianParser.js
@@ -1,15 +1,9 @@
/*
const dayjs = require('dayjs');
const parser = require('../parser');
const ParsedResult = require('../../result').ParsedResult;
const util = require('../../utils/DE');

*/

var moment = require('moment');

var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;
var util = require('../../utils/DE');

var PATTERN = new RegExp('(\\W|^)' +
const PATTERN = new RegExp('(\\W|^)' +
'(?:am\\s*?)?' +
'(?:(Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|So|Mo|Di|Mi|Do|Fr|Sa)\\s*,?\\s*)?' +
'(?:den\\s*)?' +
Expand All @@ -23,21 +17,21 @@ var PATTERN = new RegExp('(\\W|^)' +
'(?=\\W|$)', 'i'
);

var WEEKDAY_GROUP = 2;
var DATE_GROUP = 3;
var DATE_TO_GROUP = 4;
var MONTH_NAME_GROUP = 5;
var YEAR_GROUP = 6;
var YEAR_BE_GROUP = 7;
const WEEKDAY_GROUP = 2;
const DATE_GROUP = 3;
const DATE_TO_GROUP = 4;
const MONTH_NAME_GROUP = 5;
const YEAR_GROUP = 6;
const YEAR_BE_GROUP = 7;

exports.Parser = function DEMonthNameLittleEndianParser(){
Parser.apply(this, arguments);
parser.Parser.apply(this, arguments);

this.pattern = function() { return PATTERN; }

this.extract = function(text, ref, match, opt){

var result = new ParsedResult({
const result = new ParsedResult({
text: match[0].substr(match[1].length, match[0].length - match[1].length),
index: match.index + match[1].length,
ref: ref,
Expand Down Expand Up @@ -70,25 +64,10 @@ exports.Parser = function DEMonthNameLittleEndianParser(){
result.start.assign('month', month);
result.start.assign('year', year);
} else {

//Find the most appropriated year
var refMoment = moment(ref);
refMoment.month(month - 1);
refMoment.date(day);
refMoment.year(moment(ref).year());

var nextYear = refMoment.clone().add(1, 'y');
var lastYear = refMoment.clone().add(-1, 'y');
if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
refMoment = nextYear;
}
else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
refMoment = lastYear;
}

year = parser.findYearClosestToRef(ref, day, month);
result.start.assign('day', day);
result.start.assign('month', month);
result.start.imply('year', refMoment.year());
result.start.imply('year', year);
}

// Weekday component
Expand Down
39 changes: 12 additions & 27 deletions src/parsers/de/DEMonthNameParser.js
Expand Up @@ -7,28 +7,26 @@
- Januar 2012
*/

var moment = require('moment');
const parser = require('../parser');
const ParsedResult = require('../../result').ParsedResult;
const util = require('../../utils/DE');

var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;
var util = require('../../utils/DE');

var PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
const PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
'(Jan\\.?|Januar|Feb\\.?|Februar|Mär\\.?|M(?:ä|ae)rz|Mrz\\.?|Apr\\.?|April|Mai\\.?|Jun\\.?|Juni|Jul\\.?|Juli|Aug\\.?|August|Sep\\.?|Sept\\.?|September|Okt\\.?|Oktober|Nov\\.?|November|Dez\\.?|Dezember)' +
'\\s*' +
'(?:' +
',?\\s*(?:([0-9]{4})(\\s*[vn]\\.?\\s*C(?:hr)?\\.?)?|([0-9]{1,4})\\s*([vn]\\.?\\s*C(?:hr)?\\.?))' +
')?' +
'(?=[^\\s\\w]|$)', 'i');

var MONTH_NAME_GROUP = 2;
var YEAR_GROUP = 3;
var YEAR_BE_GROUP = 4;
var YEAR_GROUP2 = 5;
var YEAR_BE_GROUP2 = 6;
const MONTH_NAME_GROUP = 2;
const YEAR_GROUP = 3;
const YEAR_BE_GROUP = 4;
const YEAR_GROUP2 = 5;
const YEAR_BE_GROUP2 = 6;

exports.Parser = function ENMonthNameParser(){
Parser.apply(this, arguments);
parser.Parser.apply(this, arguments);

this.pattern = function() { return PATTERN; }

Expand Down Expand Up @@ -68,23 +66,10 @@ exports.Parser = function ENMonthNameParser(){
result.start.assign('year', year);
} else {

//Find the most appropriated year
var refMoment = moment(ref);
refMoment.month(month - 1);
refMoment.date(day);

var nextYear = refMoment.clone().add(1, 'y');
var lastYear = refMoment.clone().add(-1, 'y');
if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
refMoment = nextYear;
}
else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
refMoment = lastYear;
}

year = parser.findYearClosestToRef(ref, day, month);
result.start.imply('day', day);
result.start.assign('month', month);
result.start.imply('year', refMoment.year());
result.start.imply('year', year);
}

result.tags['DEMonthNameParser'] = true;
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/de/DESlashDateFormatParser.js
Expand Up @@ -4,7 +4,7 @@
- 11/3/2015
- 11/3
*/
var moment = require('moment');
var dayjs = require('dayjs');
var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;

Expand Down Expand Up @@ -72,8 +72,7 @@ exports.Parser = function DESlashDateFormatParser(argument) {
// MM.dd -> NG
if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;

var date = null;
var year = match[YEAR_GROUP] || moment(ref).year() + '';
var year = match[YEAR_GROUP] || dayjs(ref).year() + '';
var month = match[MONTH_GROUP];
var day = match[DAY_GROUP];

Expand Down
23 changes: 9 additions & 14 deletions src/parsers/de/DETimeAgoFormatParser.js
@@ -1,9 +1,4 @@
/*
*/

var moment = require('moment');
const dayjs = require('dayjs');
var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;
var util = require('../../utils/DE');
Expand Down Expand Up @@ -54,20 +49,20 @@ exports.Parser = function DETimeAgoFormatParser(){
num = parseInt(num);
}

var date = moment(ref);
var date = dayjs(ref);

if (/stunde|min|sekunde/i.test(match[3])) {
if (/stunde/i.test(match[3])) {

date.add(-num, 'hour');
date = date.add(-num, 'hour');

} else if (/min/i.test(match[3])) {

date.add(-num, 'minute');
date = date.add(-num, 'minute');

} else if (/sekunde/i.test(match[3])) {

date.add(-num, 'second');
date = date.add(-num, 'second');
}

result.start.imply('day', date.date());
Expand All @@ -81,7 +76,7 @@ exports.Parser = function DETimeAgoFormatParser(){
}

if (/woche/i.test(match[3])) {
date.add(-num, 'week');
date = date.add(-num, 'week');

result.start.imply('day', date.date());
result.start.imply('month', date.month() + 1);
Expand All @@ -91,16 +86,16 @@ exports.Parser = function DETimeAgoFormatParser(){
}

if (/tag/i.test(match[3])) {
date.add(-num, 'd');
date = date.add(-num, 'd');
}

if (/monat/i.test(match[3])) {
date.add(-num, 'month');
date = date.add(-num, 'month');
}

if (/jahr/i.test(match[3])) {

date.add(-num, 'year');
date = date.add(-num, 'year');
}

result.start.assign('day', date.date());
Expand Down
4 changes: 2 additions & 2 deletions src/parsers/de/DETimeExpressionParser.js
Expand Up @@ -3,7 +3,7 @@
*/

var moment = require('moment');
const dayjs = require('dayjs');
var Parser = require('../parser').Parser;
var ParsedResult = require('../../result').ParsedResult;
var ParsedComponents = require('../../result').ParsedComponents;
Expand Down Expand Up @@ -49,7 +49,7 @@ exports.Parser = function DETimeExpressionParser() {

// This pattern can be overlaped Ex. [12] AM, 1[2] AM
if (match.index > 0 && text[match.index-1].match(/\w/)) return null;
var refMoment = moment(ref);
var refMoment = dayjs(ref);
var result = new ParsedResult();
result.ref = ref;
result.index = match.index + match[1].length;
Expand Down

0 comments on commit ca12dfc

Please sign in to comment.