Giter Club home page Giter Club logo

Comments (1)

tchar avatar tchar commented on August 18, 2024

Hey @hoonkai

Yeah I figured it out too. It seems like keywords like ago, before etc only apply to the last time keyword you enter.
11 hours 0 mins ago translates to + 11 hours - 0 minutes

11 hours ago translates to - 11 hours

basically take ago and put a minus in the last keyword you entered. If you want the exact results you need to put ago after ever keyword. Like 11 hours ago 0 minutes ago

Here is a reproducable example

>>> from datetime import datetime
>>> import parsedatetime as pdt
>>> cal = pdt.Calendar(version=pdt.VERSION_CONTEXT_STYLE)
>>> reference_date =  datetime(2021, 8, 12, 12, 0, 0)
>>> cal.parseDT('11 hours ago', sourceTime=reference_date)[0]
2021-08-12 01:00:00
>>> cal.parseDT('11 hours 0 minutes ago', sourceTime=reference_date)[0]
2021-08-12 23:00:00
>>> cal.parseDT('11 hours ago 0 minutes ago', sourceTime=reference_date)[0]
2021-08-12 01:00:00

What I did is replace these keywords and put ago in a timedelta like so:

import re
from datetime import datetime
import parsedatetime as pdt

def parse_with_ago(phrase, ref_dt):
    regex = r'\s(ago|before)(\s|$)'
    cal = pdt.Calendar(version=pdt.VERSION_CONTEXT_STYLE)
    phrase, did_have_ago = re.subn(regex, ' ', phrase)

    parsed, context = cal.parseDT(phrase, sourceTime=ref_dt)
    if did_have_ago == 0: # No ago or before detected
        return parsed

    # Ago or before detected
    td = parsed - ref_dt
    phrase = '{} days ago {} seconds ago'.format(td.days, td.seconds)
    parsed, context = cal.parseDT(phrase, sourceTime=ref_dt)
    return parsed

now = datetime(2021, 8, 12, 12, 0, 0)
date = parse_with_ago('11 hours 0 minutes ago', now)
print(date) # 2021-08-12 01:00:00

date = parse_with_ago('11 hours ago', now)
print(date) # 2021-08-12 01:00:00


date = parse_with_ago('1000 years ago', now)
print(date) # 1021-08-13 12:00:00

date = parse_with_ago('1000 years 0 months 0 days 0 hours 0 minutes 0 seconds ago', now)
print(date) # 1021-08-13 12:00:00

from parsedatetime.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.