[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/python-pendulum/pendulum/develop/docs/_docs/difference.rst [Back]  [Original]

Difference
==========

The ``diff()`` method returns a `Period`_ instance that represents the total duration
between two ``Pendulum`` instances. This interval can be then expressed in various units.
These interval methods always return *the total difference expressed* in the specified time requested.
All values are truncated and not rounded.

The ``diff()`` method has a default first parameter which is the ``Pendulum`` instance to compare to,
or ``None`` if you want to use ``now()``.
The 2nd parameter is optional and indicates if you want the return value to be the absolute value
or a relative value that might have a ``-`` (negative) sign if the passed in date
is less than the current instance.
This will default to ``True``, return the absolute value. The comparisons are done in UTC.

.. code-block:: python

    import pendulum

    dt_ottawa = pendulum.create(2000, 1, 1, tz='America/Toronto')
    dt_vancouver = pendulum.create(2000, 1, 1, tz='America/Vancouver')

    dt_ottawa.diff(dt_vancouver).in_hours()
    3
    dt_ottawa.diff(dt_vancouver, False).in_hours()
    3
    dt_vancouver.diff(dt_ottawa, False).in_hours()
    -3

    dt = pendulum.create(2012, 1, 31, 0)
    dt.diff(dt.add(months=1)).in_days()
    29
    dt.diff(dt.subtract(months=1), False).in_days()
    -31

    dt = pendulum.create(2012, 4, 30, 0)
    dt.diff(dt.add(months=1)).in_days()
    30
    dt.diff(dt.add(weeks=1)).in_days()
    7

    dt = pendulum.create(2012, 1, 1, 0)
    dt.diff(dt.add(seconds=59)).in_minutes()
    0
    dt.diff(dt.add(seconds=60)).in_minutes()
    1
    dt.diff(dt.add(seconds=119)).in_minutes()
    1
    dt.diff(dt.add(seconds=120)).in_minutes()
    2

    dt.add(seconds=120).seconds_since_midnight()
    120

Difference for Humans
---------------------

The ``diff_for_humans()`` method will add a phrase after the difference value relative
to the instance and the passed in instance. There are 4 possibilities:

* When comparing a value in the past to default now:
    * 1 hour ago
    * 5 months ago

* When comparing a value in the future to default now:
    * 1 hour from now
    * 5 months from now

* When comparing a value in the past to another value:
    * 1 hour before
    * 5 months before

* When comparing a value in the future to another value:
    * 1 hour after
    * 5 months after

You may also pass ``True`` as a 2nd parameter to remove the modifiers `ago`, `from now`, etc.

.. code-block:: python

    import pendulum

    # The most typical usage is for comments
    # The instance is the date the comment was created
    # and its being compared to default now()
    pendulum.now().subtract(days=1).diff_for_humans()
    '5 days ago'

    pendulum.now().diff_for_humans(Pendulum.now().subtract(years=1))
    '1 year after'

    dt = pendulum.create(2011, 8, 1)
    dt.diff_for_humans(dt.add(months=1))
    '1 month before'
    dt.diff_for_humans(dt.subtract(months=1))
    '1 month after'

    pendulum.now().add(seconds=5).diff_for_humans()
    '5 seconds from now'

    pendulum.now().subtract(days=24).diff_for_humans()
    '3 weeks ago'

    pendulum.now().subtract(days=24).diff_for_humans(absolute=True)
    '3 weeks'

You can also change the locale of the string either globally by using ``pendulum.set_locale('fr')``
before the ``diff_for_humans()`` call or specifically for the call by passing the ``locale`` keyword
argument. See the `Localization`_ section for more detail.

.. code-block:: python

    import pendulum

    pendulum.set_locale('de')
    pendulum.now().add(years=1).diff_for_humans()
    'in 1 Jahr'
    pendulum.now().add(years=1).diff_for_humans(locale='fr')
    'dans 1 an'

Web Proxy Viewer  |  New URL  |  Original Page