Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parsing Quarters via parse(input, qqq/yyyy, locale) results in April 1st for Q3 and Q4 #1650

Closed
denmaddin opened this issue Mar 2, 2020 · 0 comments · Fixed by #1694
Closed
Assignees
Labels

Comments

@denmaddin
Copy link

I have an weired issue parsing quarter notations to an Date using the date-fns/parse()-Function.
Quarters notated in the pattern qqq/yyyy result in Q2/2020 (April 1st 2020) for the following Inputs:

  • Q2/2020
  • Q3/2020
  • Q4/2020

Tested with Locale de and en as well as upper-case QQQ and lower-case qqq.
However using the pattern yyyy-qqq works as expected.

Versions tested: 2.9.0, 2.10.0
Versions affected: 2.9.0, 2.10.0

Side Note

After further analysis it seems that the first digit succeeding the Slash limits the resulting quarters.

  • */1999 -> Q1, Q1, Q1, Q1
  • */2000 -> Q1, Q2, Q2, Q2
  • */3000 -> Q1, Q2, Q3, Q3
  • */4000 -> Q1, Q2, Q3, Q4

qqq/yyyy Example

import parse from 'date-fns/parse';
import format from 'date-fns/format';
import { de, en } from 'date-fns/locale'

test() {
    const backupDate = new Date();
    const pattern = 'qqq/yyyy';
    
    const input1 = 'Q1/2020';
    const input2 = 'Q2/2020';
    const input3 = 'Q3/2020';
    const input4 = 'Q4/2020';
    
    const parsed1 = parse(input1, pattern, backupDate);
    const parsed2 = parse(input2, pattern, backupDate);
    const parsed3 = parse(input3, pattern, backupDate);
    const parsed4 = parse(input4, pattern, backupDate);
    
    const formatted1 = format(parsed1, pattern, {locale: de});
    const formatted2 = format(parsed2, pattern, {locale: de});
    const formatted3 = format(parsed3, pattern, {locale: de});
    const formatted4 = format(parsed4, pattern, {locale: de});
    
    console.log(`in: ${input1}; parsed: ${parsed1}; formatted: ${formatted1}`);
    console.log(`in: ${input2}; parsed: ${parsed2}; formatted: ${formatted2}`);
    console.log(`in: ${input3}; parsed: ${parsed3}; formatted: ${formatted3}`);
    console.log(`in: ${input4}; parsed: ${parsed4}; formatted: ${formatted4}`);
}

Output

in: Q1/2020; parsed: Wed Jan 01 2020 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit); formatted: Q1/2020
in: Q2/2020; parsed: Wed Apr 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: Q2/2020
Q3/2020; parsed: Wed Apr 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: Q2/2020
Q4/2020; parsed: Wed Apr 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: Q2/2020

yyyy-qqq Example

import parse from 'date-fns/parse';
import format from 'date-fns/format';
import { de, en } from 'date-fns/locale'

test() {
    const backupDate = new Date();
    const pattern = 'yyyy-qqq';
    
    const input1 = '2020-Q1';
    const input2 = '2020-Q2';
    const input3 = '2020-Q3';
    const input4 = '2020-Q4';
    
    const parsed1 = parse(input1, pattern, backupDate);
    const parsed2 = parse(input2, pattern, backupDate);
    const parsed3 = parse(input3, pattern, backupDate);
    const parsed4 = parse(input4, pattern, backupDate);
    
    const formatted1 = format(parsed1, pattern, {locale: de});
    const formatted2 = format(parsed2, pattern, {locale: de});
    const formatted3 = format(parsed3, pattern, {locale: de});
    const formatted4 = format(parsed4, pattern, {locale: de});
    
    console.log(`in: ${input1}; parsed: ${parsed1}; formatted: ${formatted1}`);
    console.log(`in: ${input2}; parsed: ${parsed2}; formatted: ${formatted2}`);
    console.log(`in: ${input3}; parsed: ${parsed3}; formatted: ${formatted3}`);
    console.log(`in: ${input4}; parsed: ${parsed4}; formatted: ${formatted4}`);
}

Output

in: 2020-Q1; parsed: Wed Jan 01 2020 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit); formatted: 2020-Q1
in: 2020-Q2; parsed: Wed Apr 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: 2020-Q2
in: 2020-Q3; parsed: Wed Jul 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: 2020-Q3
in: 2020-Q4; parsed: Thu Oct 01 2020 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit); formatted: 2020-Q4

@dkozickis dkozickis self-assigned this Mar 29, 2020
kossnocorp pushed a commit that referenced this issue Apr 9, 2020
The locale was parsing wrong string after matching the pattern
Pyppe pushed a commit to Pyppe/date-fns that referenced this issue Apr 16, 2020
The locale was parsing wrong string after matching the pattern
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants