# Kronos
<div align="center">
[![PyPI - Version](https://img.shields.io/pypi/v/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)
[![Tests](https://github.com/nat5142/kronos/workflows/tests/badge.svg)](https://github.com/nat5142/kronos/actions?workflow=tests)
[![Codecov](https://codecov.io/gh/nat5142/kronos/branch/main/graph/badge.svg)](https://codecov.io/gh/nat5142/kronos)
[![Read the Docs](https://readthedocs.org/projects/nat5142-kronos/badge/)](https://kronos.readthedocs.io/)
[![PyPI - License](https://img.shields.io/pypi/l/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)
[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
</div>
Kronos makes dateranges easier.
* GitHub repo: <https://github.com/nat5142/kronos.git>
* Documentation: <https://nat5142-kronos.readthedocs.io/>
* Free software: BSD
<br>
## Quickstart
---
Install from pip:
```shell
pip install kronos-daterange
```
Import & basic init:
```python
from kronos import Kronos
kronos = Kronos(start_date='2022-01-01', end_date='2022-01-31')
```
<br>
## Feature Demo
---
```python
# import
from kronos import Kronos
# init --> defaults to range of <yesterday, today> unless otherwise specified by `KRONOS_DATERANGE` environment variable
kronos = Kronos()
# manually set dates
kronos = Kronos(start_date='2022-10-17', end_date='2022-10-23')
# set timezone
kronos = Kronos(timezone='America/New_York')
# specify date format
kronos = Kronos(start_date='10/20/2022', end_date='10/31/2022', date_format='%m/%d/%Y')
# access start, end dates
kronos = Kronos()
kronos.start_date
# 2022-10-19
kronos.end_date
# 2022-10-20
# `date_format` carries over to properties:
kronos = Kronos(date_format='%m/%d/%Y')
kronos.start_date
# 10/19/2022
kronos.end_date
# 10/20/2022
# format start and end date with new format
kronos.format_start('%Y-%m-%d %H:%M:%S')
# 2022-10-20 00:00:00
kronos.format_end('%Y-%m-%d %H:%M:%S')
# 2022-10-21 23:59:59
# get the current date in specified timezone
kronos = Kronos('America/Los_Angeles')
kronos.current_date
# 2022-10-20
kronos = Kronos('America/Los_Angeles', date_format='%m/%d/%Y')
kronos.current_date
# 10/20/2022
# overwrite your object's timezone without altering the time
kronos = Kronos(timezone='UTC')
kronos.change_timezone(tz='America/New_York')
# relative shift forward/back
kronos = Kronos()
kronos.shift_range(weeks=-1) # pipes kwargs into timedelta
# Kronos(start_date='2022-10-12', end_date='2022-10-13', ... )
# pass start and end dates as datetime objects
start_dt = datetime(2023, 3, 8, 12, 0, 0)
end_dt = datetime(2023, 3, 9, 12, 0, 0)
kronos = Kronos(start_dt, end_dt)
kronos.format_start('%Y-%m-%d %H:%M:%S')
# 2023-03-08 12:00:00
kronos.format_end('%Y-%m-%d %H:%M:%S')
# 2023-03-09 12:00:00
# bisect a daterange
kronos = Kronos('2023-03-01', '2023-03-09')
k1, k2 = kronos.splice('2023-03-04')
print(k1)
# Kronos(start_date='2023-03-01', end_date='2023-03-04', ...)
print(k2)
# Kronos(start_date='2023-03-04', end_date='2023-03-09', ...)
```
<br>
## Defaults/Environment Variables
---
Kronos is prepared to accept the following environment variables:
- `KRONOS_TIMEZONE`, which defaults to UTC if not set. Can often be overridden at method-levels for one-off timezone conversions.
- `KRONOS_FORMAT`, the strptime date format string for your dates.
- `KRONOS_DATERANGE` (see below)
Note that both `KRONOS_TIMEZONE` and `KRONOS_FORMAT` can be set during init as `timezone=` and `date_format=` arguments, respectively.
### `KRONOS_TIMEZONE`:
Can be any valid timezone name (find them at `pytz.all_timezones`)
### `KRONOS_DATERANGE`:
List of accepted values:
- `LATEST`: start/end dates of yesterady/today
- `YESTERDAY_TODAY`: same as `LATEST`
- `LAST_MONTH`: previous calendar month
- `MTD`: month-to-date
- `LAST_{X}_DAYS`: relative range where end_date is today, start date is set X days behind.
- `THIS_WEEK__{X}`: week-to-date starting on previous day of week specified by X. Valid values for X: `SUN, MON, TUES, WED, THURS, FRI, SAT`
<br>
## Credits
---
This package was created with [Cookiecutter][cookiecutter] and the [fedejaure/cookiecutter-modern-pypackage][cookiecutter-modern-pypackage] project template.
[cookiecutter]: https://github.com/cookiecutter/cookiecutter
[cookiecutter-modern-pypackage]: https://github.com/fedejaure/cookiecutter-modern-pypackage
Raw data
{
"_id": null,
"home_page": "https://github.com/nat5142/kronos",
"name": "kronos-daterange",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7,<3.11",
"maintainer_email": "",
"keywords": "kronos,kronos-daterange,daterange",
"author": "Nick Tulli",
"author_email": "ntulli.dev@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/a1/2e/bdd3ac156c235863c223bfbd0f96b3de1b32f0b12db043be7f4bae9bdbd5/kronos-daterange-0.0.14.tar.gz",
"platform": null,
"description": "\n# Kronos\n\n\n<div align=\"center\">\n\n[![PyPI - Version](https://img.shields.io/pypi/v/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)\n[![Tests](https://github.com/nat5142/kronos/workflows/tests/badge.svg)](https://github.com/nat5142/kronos/actions?workflow=tests)\n[![Codecov](https://codecov.io/gh/nat5142/kronos/branch/main/graph/badge.svg)](https://codecov.io/gh/nat5142/kronos)\n[![Read the Docs](https://readthedocs.org/projects/nat5142-kronos/badge/)](https://kronos.readthedocs.io/)\n[![PyPI - License](https://img.shields.io/pypi/l/kronos-daterange.svg)](https://pypi.python.org/pypi/kronos-daterange)\n\n[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)\n\n\n</div>\n\n\nKronos makes dateranges easier.\n\n\n* GitHub repo: <https://github.com/nat5142/kronos.git>\n* Documentation: <https://nat5142-kronos.readthedocs.io/>\n* Free software: BSD\n\n<br>\n\n## Quickstart\n---\n\nInstall from pip:\n\n```shell\npip install kronos-daterange\n```\n\nImport & basic init:\n```python\nfrom kronos import Kronos\n\nkronos = Kronos(start_date='2022-01-01', end_date='2022-01-31')\n```\n\n<br>\n\n## Feature Demo\n---\n\n```python\n# import\nfrom kronos import Kronos\n\n# init --> defaults to range of <yesterday, today> unless otherwise specified by `KRONOS_DATERANGE` environment variable\nkronos = Kronos()\n\n# manually set dates\nkronos = Kronos(start_date='2022-10-17', end_date='2022-10-23')\n\n# set timezone\nkronos = Kronos(timezone='America/New_York') \n\n# specify date format\nkronos = Kronos(start_date='10/20/2022', end_date='10/31/2022', date_format='%m/%d/%Y')\n\n# access start, end dates\nkronos = Kronos()\nkronos.start_date\n# 2022-10-19\nkronos.end_date\n# 2022-10-20\n\n# `date_format` carries over to properties:\nkronos = Kronos(date_format='%m/%d/%Y')\nkronos.start_date\n# 10/19/2022\nkronos.end_date\n# 10/20/2022\n\n# format start and end date with new format\nkronos.format_start('%Y-%m-%d %H:%M:%S')\n# 2022-10-20 00:00:00\nkronos.format_end('%Y-%m-%d %H:%M:%S')\n# 2022-10-21 23:59:59\n\n# get the current date in specified timezone\nkronos = Kronos('America/Los_Angeles')\nkronos.current_date\n# 2022-10-20\nkronos = Kronos('America/Los_Angeles', date_format='%m/%d/%Y')\nkronos.current_date\n# 10/20/2022\n\n# overwrite your object's timezone without altering the time\nkronos = Kronos(timezone='UTC')\nkronos.change_timezone(tz='America/New_York')\n\n# relative shift forward/back\nkronos = Kronos()\nkronos.shift_range(weeks=-1) # pipes kwargs into timedelta\n# Kronos(start_date='2022-10-12', end_date='2022-10-13', ... )\n\n# pass start and end dates as datetime objects\nstart_dt = datetime(2023, 3, 8, 12, 0, 0)\nend_dt = datetime(2023, 3, 9, 12, 0, 0)\nkronos = Kronos(start_dt, end_dt)\nkronos.format_start('%Y-%m-%d %H:%M:%S')\n# 2023-03-08 12:00:00\nkronos.format_end('%Y-%m-%d %H:%M:%S')\n# 2023-03-09 12:00:00\n\n# bisect a daterange\nkronos = Kronos('2023-03-01', '2023-03-09')\nk1, k2 = kronos.splice('2023-03-04')\nprint(k1)\n# Kronos(start_date='2023-03-01', end_date='2023-03-04', ...) \nprint(k2)\n# Kronos(start_date='2023-03-04', end_date='2023-03-09', ...)\n```\n\n<br>\n\n## Defaults/Environment Variables\n---\n\nKronos is prepared to accept the following environment variables:\n\n- `KRONOS_TIMEZONE`, which defaults to UTC if not set. Can often be overridden at method-levels for one-off timezone conversions.\n- `KRONOS_FORMAT`, the strptime date format string for your dates.\n- `KRONOS_DATERANGE` (see below)\n\nNote that both `KRONOS_TIMEZONE` and `KRONOS_FORMAT` can be set during init as `timezone=` and `date_format=` arguments, respectively.\n\n### `KRONOS_TIMEZONE`:\n\nCan be any valid timezone name (find them at `pytz.all_timezones`)\n\n### `KRONOS_DATERANGE`:\n\nList of accepted values:\n\n- `LATEST`: start/end dates of yesterady/today\n- `YESTERDAY_TODAY`: same as `LATEST`\n- `LAST_MONTH`: previous calendar month\n- `MTD`: month-to-date\n- `LAST_{X}_DAYS`: relative range where end_date is today, start date is set X days behind.\n- `THIS_WEEK__{X}`: week-to-date starting on previous day of week specified by X. Valid values for X: `SUN, MON, TUES, WED, THURS, FRI, SAT`\n\n<br>\n\n## Credits\n---\n\nThis package was created with [Cookiecutter][cookiecutter] and the [fedejaure/cookiecutter-modern-pypackage][cookiecutter-modern-pypackage] project template.\n\n[cookiecutter]: https://github.com/cookiecutter/cookiecutter\n[cookiecutter-modern-pypackage]: https://github.com/fedejaure/cookiecutter-modern-pypackage\n",
"bugtrack_url": null,
"license": "",
"summary": "Kronos makes date ranges easier.",
"version": "0.0.14",
"project_urls": {
"Bug Tracker": "https://github.com/nat5142/kronos/issues",
"Documentation": "https://nat5142-kronos.readthedocs.io/",
"Homepage": "https://github.com/nat5142/kronos",
"Repository": "https://github.com/nat5142/kronos"
},
"split_keywords": [
"kronos",
"kronos-daterange",
"daterange"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1a4cd932fcde8169cd6fd6a25c95935db2a38e22fb57545692b0beffd5393c4c",
"md5": "cbc642627ea0393dd6c63e2c946ee50d",
"sha256": "0fff921864c93b4f8f0372fb1c9d61f0ac5529b3c8d71cbb0867a40af7413ea0"
},
"downloads": -1,
"filename": "kronos_daterange-0.0.14-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cbc642627ea0393dd6c63e2c946ee50d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7,<3.11",
"size": 10994,
"upload_time": "2023-12-13T22:28:50",
"upload_time_iso_8601": "2023-12-13T22:28:50.671279Z",
"url": "https://files.pythonhosted.org/packages/1a/4c/d932fcde8169cd6fd6a25c95935db2a38e22fb57545692b0beffd5393c4c/kronos_daterange-0.0.14-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a12ebdd3ac156c235863c223bfbd0f96b3de1b32f0b12db043be7f4bae9bdbd5",
"md5": "335909632aee663f1dac72810c2f5f50",
"sha256": "539f7563eab6a930bd4506ecc0c64f487911d24af192a7c085f18bea45bbe6dc"
},
"downloads": -1,
"filename": "kronos-daterange-0.0.14.tar.gz",
"has_sig": false,
"md5_digest": "335909632aee663f1dac72810c2f5f50",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7,<3.11",
"size": 12938,
"upload_time": "2023-12-13T22:28:49",
"upload_time_iso_8601": "2023-12-13T22:28:49.323112Z",
"url": "https://files.pythonhosted.org/packages/a1/2e/bdd3ac156c235863c223bfbd0f96b3de1b32f0b12db043be7f4bae9bdbd5/kronos-daterange-0.0.14.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-13 22:28:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "nat5142",
"github_project": "kronos",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "kronos-daterange"
}