Files
2026-07-13 12:48:55 +08:00

369 lines
13 KiB
JavaScript

import test from 'tape'
import nlp from './_lib.js'
const context = {
today: '2020-01-21',
timezone: 'Canada/Pacific',
}
const arr = [
// explicit-dates
[`march 2nd`, '2020-03-02T00:00:00.000-08:00'],
[`2 march`, '2020-03-02T00:00:00.000-08:00'],
[`tues march 2`, '2020-03-02T00:00:00.000-08:00'],
[`march the second`, '2020-03-02T00:00:00.000-08:00'],
[`on the 2nd of march`, '2020-03-02T00:00:00.000-08:00'],
// numerical-dates
[`1999/03/02`, 'march 2 1999'],
[`1999-03-02`, 'march 2 1999'],
[`03-02-1999`, 'march 2nd 1999'],
[`03/02`, 'march 2'],
[`2015.08.13`, 'aug 13 2015'],
// named-dates
[`today`, '2020-01-21'],
[`now`, 'right now'],
[`q1`, 'jan 1'],
[`tomorrow`, '2020-01-22'],
// time
[`2pm`, '2020-01-21T14:00:00.000-08:00'],
[`2:12pm`, '2020-01-21T14:12:00.000-08:00'],
[`2pm eastern time`, '2020-01-21T14:00:00.000-05:00'],
[`2:12 in the evening`, '2020-01-21T14:12:00.000-08:00'],
[`02:12:00am`, '2020-01-21T02:12:00.000-08:00'],
[`2 oclock am`, '2020-01-21T02:00:00.000-08:00'],
[`noon`, 'today at 12pm'],
[`at night`, 'today at 8:00pm'],
// [`in the morning`, 'tomorrow at 8:00pm'],
[`tomorrow evening`, 'Jan 22 6pm'],
[`aug-20`, '20-aug'],
[`in a few years`, `in 2 years`],
[`in a couple years`, `in 2 years`],
[`2 weeks back`, `2 weeks ago`],
[`last q1`, `q1 2019`],
[`last q2`, `q2 2019`],
[`last q3`, `q3 2019`],
[`last q4`, `q4 2019`],
[`this q1`, `q1 2020`],
[`this q2`, `q2 2020`],
[`this q3`, `q3 2020`],
[`this q4`, `q4 2020`],
[`next q1`, `q1 2021`],
[`next q2`, `q2 2021`],
[`next q3`, `q3 2021`],
[`next q4`, `q4 2021`],
[`tuesday at 3`, `tuesday 3:00pm`],
[`tuesday at 4:00`, `tuesday 4:00pm`],
[`5:30`, `today at 5:30pm`],
[`tuesday at 3am`, `tuesday 3:00am`],
[`5 oclock`, `today at 5:00pm`],
[`5 oclock am`, `today at 5:00am`],
[`10 oclock`, `today at 10:00am`],
[`11:30`, `today at 11:30am`],
[`11:30pm`, `today at 11:30pm`],
[`tuesday at 1`, `tuesday at 1pm`],
[`march this year`, `2020-03-01`],
[`march next year`, `2021-03-01`],
[`march last year`, `2019-03-01`],
['this fri, monday', 'fri jan 24 and mon jan 27'],
['next friday, this monday', 'fri jan 31 and mon jan 27'],
['until christmas', '2020-01-21 to 2020-12-25'],
['until feb 3 2024', '2020-01-21 to 2024-02-03'],
['first half of march', '2020-03-01 to 2020-03-16'],
['second half of march', '2020-03-16 to 2020-03-30 '],
['between Sept and Oct', 'sept 2020 to oct 2020'],
['between Sept and Oct 2008', 'sept 2008 to oct 2008'],
['between Oct and Sept', 'sept 2020 to oct 2020'],
['between Oct and Sept 2008', 'sept 2008 to oct 2008'],
// relative dates
[`in 3 days`, '2020-01-24'],
[`in 1 week`, '2020-01-28'],
[`in 2 months`, '2020-03-21'],
[`in 1 year`, '2021-01-21'],
[`2 days ago`, '2020-01-19'],
[`1 week ago`, '2020-01-14'],
[`2 months ago`, '2019-11-21'],
[`1 year ago`, '2019-01-21'],
// day of the week
[`next monday`, '2020-01-27'],
[`next tuesday`, '2020-01-28'],
[`last sunday`, '2020-01-19'],
[`last wednesday`, '2020-01-15'],
[`last saturday`, '2020-01-18'],
// time with timezone
[`2pm Canada/Pacific`, '2020-01-21T14:00:00.000-08:00'],
[`2pm Canada/Eastern`, '2020-01-21T14:00:00.000-05:00'],
[`2pm UTC`, '2020-01-21T14:00:00.000+00:00'],
// date range
[`from jan 1 to jan 5`, '2020-01-01 to 2020-01-05'],
[`from jan 1 to feb 1`, '2020-01-01 to 2020-02-01'],
[`from jan 1 2020 to jan 5 2021`, '2020-01-01 to 2021-01-05'],
[`from jan 1 2020 to feb 1 2021`, '2020-01-01 to 2021-02-01'],
[`between jan 1 and jan 5`, '2020-01-01 to 2020-01-05'],
[`between jan 1 and feb 1`, '2020-01-01 to 2020-02-01'],
[`between jan 1 2020 and jan 5 2021`, '2020-01-01 to 2021-01-05'],
[`between jan 1 2020 and feb 1 2021`, '2020-01-01 to 2021-02-01'],
// additional explicit-dates
[`march 3rd`, '2020-03-03T00:00:00.000-08:00'],
[`3 march`, '2020-03-03T00:00:00.000-08:00'],
[`wed march 4`, '2020-03-04T00:00:00.000-08:00'],
[`march the third`, '2020-03-03T00:00:00.000-08:00'],
[`on the 3rd of march`, '2020-03-03T00:00:00.000-08:00'],
// additional numerical-dates
[`1999/03/03`, 'march 3 1999'],
[`1999-03-03`, 'march 3 1999'],
[`03-03-1999`, 'march 3rd 1999'],
[`03/03`, 'march 3'],
[`2015.08.14`, 'aug 14 2015'],
// additional named-dates
[`yesterday`, '2020-01-20'],
[`q2`, 'apr 1'],
[`next month`, '2020-02-01'],
// additional time
[`3pm`, '2020-01-21T15:00:00.000-08:00'],
[`3:30pm`, '2020-01-21T15:30:00.000-08:00'],
[`3pm eastern time`, '2020-01-21T15:00:00.000-05:00'],
[`3:30 in the evening`, '2020-01-21T15:30:00.000-08:00'],
[`03:30:00am`, '2020-01-21T03:30:00.000-08:00'],
[`3 oclock am`, '2020-01-21T03:00:00.000-08:00'],
[`midnight`, 'today at 12am'],
[`in the afternoon`, 'today at 2:00pm'],
[`in the evening`, 'today at 6:00pm'],
// [`in the morning`, 'tomorrow at 8:00am'],
[`tomorrow night`, 'Jan 22 8pm'],
[`sep-20`, '20-sep'],
[`in a few months`, `in 2 months`],
[`in a couple months`, `in 2 months`],
[`2 weeks from now`, `2 weeks from today`],
[`next q1`, `q1 2021`],
[`next q2`, `q2 2021`],
[`next q3`, `q3 2021`],
[`next q4`, `q4 2021`],
[`wednesday at 2`, `wednesday 2:00pm`],
[`wednesday at 3:00`, `wednesday 3:00pm`],
[`4:30`, `today at 4:30pm`],
[`wednesday at 3am`, `wednesday 3:00am`],
[`4 oclock`, `today at 4:00pm`],
[`6 oclock am`, `today at 6:00am`],
[`11 oclock`, `today at 11:00am`],
[`12:30`, `today at 12:30pm`],
[`12:30am`, `today at 12:30am`],
[`wednesday at 1`, `wednesday at 1pm`],
[`march this year`, `2020-03-01`],
[`march next year`, `2021-03-01`],
[`march last year`, `2019-03-01`],
['this fri, next monday', 'fri jan 24 and mon jan 31'],
['next friday, next monday', 'fri jan 31 and mon jan 31'],
['until next christmas', '2020-01-21 to 2021-12-25'],
['until feb 3 2025', '2020-01-21 to 2025-02-03'],
['between Oct and Sept 2022', 'sept 2022 to oct 2022'],
['between Oct and Sept 2023', 'sept 2023 to oct 2023'],
// additional relative dates
[`in 4 days`, '2020-01-25'],
[`in 2 weeks`, '2020-02-04'],
[`in 3 months`, '2020-04-21'],
[`in 2 years`, '2022-01-21'],
[`3 days ago`, '2020-01-18'],
[`2 weeks ago`, '2020-01-07'],
[`3 months ago`, '2019-10-21'],
[`2 years ago`, '2018-01-21'],
// additional day of the week
[`last monday`, '2020-01-13'],
[`last tuesday`, '2020-01-14'],
[`last friday`, '2020-01-17'],
// additional time with timezone
[`3pm Canada/Pacific`, '2020-01-21T15:00:00.000-08:00'],
[`3pm Canada/Eastern`, '2020-01-21T15:00:00.000-05:00'],
[`3pm UTC`, '2020-01-21T15:00:00.000+00:00'],
// additional date range
[`from jan 6 to jan 10`, '2020-01-06 to 2020-01-10'],
[`from jan 6 to feb 6`, '2020-01-06 to 2020-02-06'],
[`from jan 6 2020 to jan 10 2021`, '2020-01-06 to 2021-01-10'],
[`from jan 6 2020 to feb 6 2021`, '2020-01-06 to 2021-02-06'],
[`between jan 6 and jan 10`, '2020-01-06 to 2020-01-10'],
[`between jan 6 and feb 6`, '2020-01-06 to 2020-02-06'],
[`between jan 6 2020 and jan 10 2021`, '2020-01-06 to 2021-01-10'],
[`between jan 6 2020 and feb 6 2021`, '2020-01-06 to 2021-02-06'],
// additional equals pairs
[`november 11th`, `2020-11-11T00:00:00.000-08:00`],
[`11 november`, `2020-11-11T00:00:00.000-08:00`],
[`december 12th`, `2020-12-12T00:00:00.000-08:00`],
[`12 december`, `2020-12-12T00:00:00.000-08:00`],
[`january 22nd`, `2020-01-22T00:00:00.000-08:00`],
[`22 january`, `2020-01-22T00:00:00.000-08:00`],
[`february 2nd`, `2020-02-02T00:00:00.000-08:00`],
[`2 february`, `2020-02-02T00:00:00.000-08:00`],
[`march 2nd 2020`, `2020-03-02T00:00:00.000-08:00`],
[`2 march 2020`, `2020-03-02T00:00:00.000-08:00`],
[`2020/03/02`, `march 2 2020`],
[`2020-03-02`, `march 2 2020`],
[`03-02-2020`, `march 2nd 2020`],
[`03/02/2020`, `march 2 2020`],
[`2015.08.15`, `aug 15 2015`],
[`2015-08-15`, `aug 15 2015`],
[`04/04`, `april 4`],
[`next year`, `2021-01-01`],
[`this year`, `2020-01-01`],
[`last year`, `2019-01-01`],
[`this week`, `2020-01-20`],
[`next week`, `2020-01-27`],
[`last week`, `2020-01-13`],
[`this weekend`, `2020-01-25`],
[`next weekend`, `2020-02-01`],
[`last weekend`, `2020-01-18`],
[`q3`, `jul 1`],
[`q4`, `oct 1`],
[`this quarter`, `q1 2020`],
[`next quarter`, `q2 2020`],
[`last quarter`, `q4 2019`],
[`in 5 days`, `2020-01-26`],
[`in 6 days`, `2020-01-27`],
[`in 10 days`, `2020-01-31`],
[`in 14 days`, `2020-02-04`],
[`in 3 weeks`, `2020-02-11`],
[`in 4 weeks`, `2020-02-18`],
[`in 6 months`, `2020-07-21`],
[`in 3 years`, `2023-01-21`],
[`5 days ago`, `2020-01-16`],
[`10 days ago`, `2020-01-11`],
[`3 weeks ago`, `2019-12-31`],
[`6 months ago`, `2019-07-21`],
[`3 years ago`, `2017-01-21`],
[`a week from now`, `2020-01-28`],
[`a month from now`, `2020-02-21`],
[`a year from now`, `2021-01-21`],
[`a week ago`, `2020-01-14`],
[`a month ago`, `2019-12-21`],
[`a year ago`, `2019-01-21`],
[`this monday`, `2020-01-27`],
[`this wednesday`, `2020-01-22`],
[`this thursday`, `2020-01-23`],
[`this friday`, `2020-01-24`],
[`this saturday`, `2020-01-25`],
[`this sunday`, `2020-01-26`],
[`next wednesday`, `2020-01-29`],
[`next thursday`, `2020-01-30`],
[`next friday`, `2020-01-31`],
[`next saturday`, `2020-02-01`],
[`next sunday`, `2020-02-02`],
[`last thursday`, `2020-01-16`],
[`4pm`, `2020-01-21T16:00:00.000-08:00`],
[`4:00pm`, `2020-01-21T16:00:00.000-08:00`],
[`4:00 pm`, `2020-01-21T16:00:00.000-08:00`],
[`4pm pst`, `2020-01-21T16:00:00.000-08:00`],
[`4pm pacific time`, `2020-01-21T16:00:00.000-08:00`],
[`4pm eastern time`, `2020-01-21T16:00:00.000-05:00`],
[`4pm est`, `2020-01-21T16:00:00.000-05:00`],
[`4:30 in the afternoon`, `2020-01-21T16:30:00.000-08:00`],
[`4:30pm`, `2020-01-21T16:30:00.000-08:00`],
[`04:30:00pm`, `2020-01-21T16:30:00.000-08:00`],
[`4 oclock pm`, `2020-01-21T16:00:00.000-08:00`],
[`half past 4`, `2020-01-21T16:30:00.000-08:00`],
[`quarter past 4`, `2020-01-21T16:15:00.000-08:00`],
[`6am`, `2020-01-21T06:00:00.000-08:00`],
[`6:00am`, `2020-01-21T06:00:00.000-08:00`],
[`8am`, `2020-01-21T08:00:00.000-08:00`],
[`8:00 in the morning`, `2020-01-21T08:00:00.000-08:00`],
[`this afternoon`, `today at 2:00pm`],
[`this evening`, `today at 6:00pm`],
[`tomorrow afternoon`, `Jan 22 2pm`],
[`thursday at 4`, `thursday 4:00pm`],
[`thursday at 4:30`, `thursday 4:30pm`],
[`friday at 5`, `friday 5:00pm`],
[`friday at 5am`, `friday 5:00am`],
[`7 oclock pm`, `today at 7:00pm`],
[`9:15`, `today at 9:15am`],
[`9:15am`, `today at 9:15am`],
[`9:15pm`, `today at 9:15pm`],
[`4pm Canada/Pacific`, `2020-01-21T16:00:00.000-08:00`],
[`4pm Canada/Eastern`, `2020-01-21T16:00:00.000-05:00`],
[`4pm UTC`, `2020-01-21T16:00:00.000+00:00`],
[`in a few days`, `in 2 days`],
[`in a couple days`, `in 2 days`],
[`in a few weeks`, `in 2 weeks`],
[`in a couple weeks`, `in 2 weeks`],
[`2 days back`, `2 days ago`],
[`3 weeks back`, `3 weeks ago`],
[`1 month back`, `1 month ago`],
[`1 year back`, `1 year ago`],
[`apr this year`, `2020-04-01`],
[`apr next year`, `2021-04-01`],
[`apr last year`, `2019-04-01`],
[`may this year`, `2020-05-01`],
[`june this year`, `2020-06-01`],
[`july this year`, `2020-07-01`],
[`aug this year`, `2020-08-01`],
[`sept this year`, `2020-09-01`],
[`oct this year`, `2020-10-01`],
[`nov this year`, `2020-11-01`],
[`dec this year`, `2020-12-01`],
[`jan this year`, `2020-01-01`],
[`feb this year`, `2020-02-01`],
[`from feb 1 to feb 5`, `2020-02-01 to 2020-02-05`],
[`between feb 1 and feb 5`, `2020-02-01 to 2020-02-05`],
[`from march 1 to april 1`, `2020-03-01 to 2020-04-01`],
[`between march 1 and april 1`, `2020-03-01 to 2020-04-01`],
[`from jan 21 to jan 25`, `2020-01-21 to 2020-01-25`],
[`between jan 21 and jan 25`, `2020-01-21 to 2020-01-25`],
[`until valentines day`, `2020-01-21 to 2020-02-14`],
[`until easter`, `2020-01-21 to 2020-04-12`],
[`until halloween`, `2020-01-21 to 2020-10-31`],
[`first half of april`, `2020-04-01 to 2020-04-15`],
[`first half of february`, `2020-02-01 to 2020-02-15`],
[`between Jan and Feb`, `jan 2020 to feb 2020`],
[`between Jan and Feb 2019`, `jan 2019 to feb 2019`],
[`between Mar and Apr`, `march 2020 to april 2020`],
[`between Mar and Apr 2019`, `march 2019 to april 2019`],
[`christmas`, `2020-12-25`],
[`christmas 2020`, `2020-12-25`],
[`xmas`, `2020-12-25`],
[`new years`, `2021-01-01`],
[`new years eve`, `2020-12-31`],
[`halloween`, `2020-10-31`],
[`thanksgiving`, `2020-11-26`],
[`thanksgiving 2020`, `2020-11-26`],
[`valentines day`, `2020-02-14`],
[`independence day`, `2020-07-04`],
[`easter`, `2020-04-12`],
[`easter sunday`, `2020-04-12`],
[`good friday`, `2020-04-10`],
[`presidents day`, `2020-02-17`],
[`mothers day`, `2020-05-10`],
[`fathers day`, `2020-06-21`],
[`black friday`, `2020-11-27`],
[`spring`, `2020-03-01`],
[`spring 2020`, `2020-03-01`],
[`summer`, `2020-06-01`],
[`summer 2020`, `2020-06-01`],
[`fall`, `2020-09-01`],
[`fall 2020`, `2020-09-01`],
[`autumn`, `2020-09-01`],
[`winter`, `2020-12-01`],
[`winter 2020`, `2020-12-01`],
]
test('date-variety', function (t) {
arr.forEach((a) => {
const left = nlp(a[0]).dates(context).json()[0] || {}
const right = nlp(a[1]).dates(context).json()[0] || {}
left.dates = left.dates || {}
right.dates = right.dates || {}
t.equal(left.dates.start, right.dates.start, a[0] + ' -> ' + a[1])
})
t.end()
})