dateparser icon indicating copy to clipboard operation
dateparser copied to clipboard

Parsing plain year numbers like "2024" with "PREFER..."-settings set to "last" returns wrong date. 1 day missing...

Open Zeutschler opened this issue 1 year ago • 4 comments

print(dateparser.parse( date_string="2024", settings={"STRICT_PARSING": False, "PREFER_DAY_OF_MONTH": "last", "PREFER_MONTH_OF_YEAR": "last", "PREFER_DATES_FROM": "past"})) 2024-12-30 00:00:00

It seems you're skipping a day. It should be 2024-12-31 00:00:00

...running on Macbook Air M2, Python 3.11 with

import locale print(locale.getlocale()) (None, 'UTF-8')

Zeutschler avatar Jun 09 '24 15:06 Zeutschler

Same problem here on windows, using only settings={ "PREFER_DAY_OF_MONTH": "last", "PREFER_MONTH_OF_YEAR": "last" }

gguimezanes avatar Jun 25 '24 15:06 gguimezanes

I am also experiencing this with the following minimal code on dateparser version is 1.2.0:

import dateparser
dateparser_settings = {
    "PREFER_MONTH_OF_YEAR": (
        "last"
    ),
    "PREFER_DAY_OF_MONTH": (
        "last"
    ),
    "PARSERS": ["absolute-time"],
}

value = "2024"
parsed_date = dateparser.parse(
    value, settings=dateparser_settings
) # output: datetime.datetime(2024, 12, 30, 0, 0)

lluissalord avatar Sep 02 '24 05:09 lluissalord

Investigating a bit more and testing it with time_machine library. I've been able to check that the output seems to depend on the month when you are executing the code:

Code:

import time_machine

for month in range(1,13):
    travel_date = f"2024-{month}-15"
    with time_machine.travel(travel_date):
        import dateparser
        dateparser_settings = {
            "PREFER_MONTH_OF_YEAR": (
                "last"
            ),
            "PREFER_DAY_OF_MONTH": (
                "last"
            ),
            "PARSERS": ["absolute-time"],
        }

        value = "2024"
        parsed_date = dateparser.parse(
            value, settings=dateparser_settings
        )
        print(f"Current date: {travel_date}. Last year date: {parsed_date}")

Output:

Current date: 2024-1-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-2-15. Last year date: 2024-12-29 00:00:00
Current date: 2024-3-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-4-15. Last year date: 2024-12-30 00:00:00
Current date: 2024-5-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-6-15. Last year date: 2024-12-30 00:00:00
Current date: 2024-7-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-8-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-9-15. Last year date: 2024-12-30 00:00:00
Current date: 2024-10-15. Last year date: 2024-12-31 00:00:00
Current date: 2024-11-15. Last year date: 2024-12-30 00:00:00
Current date: 2024-12-15. Last year date: 2024-12-31 00:00:00

lluissalord avatar Sep 02 '24 05:09 lluissalord

@lluissalord : That's a perfect proof for a funny bug! Thx

Zeutschler avatar Sep 02 '24 06:09 Zeutschler