Metadata-Version: 2.4
Name: datefun
Version: 0.0.4
Summary: Functional approach to dates (as ISO-DATE string)
Author: Nauri Nastik
License-File: LICENSE.txt
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# datefun

Functional approach to date manipulations.

Date is string. In ISO format (Y-M-D). Mostly it came from database. 

Now we want some manipulations and return again ISO date as string.

Conversion functions:
- dt_make(year: int, month: int, day: int) -> str
- dt_from_object(obj: datetime) -> str

Date (string) output functions:
- dt_month_start(iso_date: str) -> str
- dt_month_end(iso_date: str) -> str
- dt_year_start(iso_date: str) -> str
- dt_year_end(iso_date: str) -> str
- dt_add_years(iso_date: str, many_years: int, interpret_0228_as_monthend: bool = True) -> str
- dt_add_months(iso_date: str, many_months: int, stay_in_month_end: bool = True) -> str
- dt_add_days(iso_date: str, many_days: int) -> str

Boolean output functions:
- is_leap_year(year_or_date: int | str) -> bool
- is_valid_date(iso_date: str) -> bool

Integer output functions:
- int_days_in_month(iso_date: str) -> int


No external dependecies (only internals, eg. datetime)

Needs python 3.10 (because of type hints/annotations with pipes)

# install

`pip install datefun`

(or pip3 or pipx)

# usage

```python
from datefun import datefun

print(datefun.dt_add_months("2025-02-28", -1)) # outputs 2025-01-31
print(datefun.dt_add_months("2025-02-28", 1, False)) # outputs 2025-03-28

```

or

```python
from datefun.datefun import dt_add_months

print(dt_add_months("2025-02-28", -1)) # outputs 2025-01-31
print(dt_add_months("2025-02-28", 1, False)) # outputs 2025-03-28

```


