Pythonic dates, times, and deltas in JavaScript. Advantages:
- The same API as Python's datetime module (see below for differences).
- Clear distinction between naive and aware datetimes.
- All functions/methods return immutable (ok, frozen) objects.
- Timedelta arithmetics.
- Unix timestamps (i.e. seconds instead of milliseconds).
- Lightweight (~3KB gzipped).
This is not a re-write of Python's datetime module in JavaScript; instead, it leverages the native Date functions wherever possible. In fact, you can think about pythonic-datetime as a wrapper.
Whetting your appetite:
varbirthday=datetime.date(1989,12,5);// ja, months start from 1console.warn(birthday.year);// 1989birthday.year=1431;// raises TypeError in strict, simply fails otherwisevarpartyDay=datetime.date(2016,12,5);// presents are welcomevaryearsAlive=partyDay.subtract(birthday)// returns timedelta object.divide(datetime.timedelta({days: 365}));varpartyTime=datetime.time(21,30);datetime.datetime.combine(partyDay,partyTime).isoformat();// 2016-12-05T21:30:00bower install pythonic-datetime. Or you can git clone this repo as a submodule; the master branch will always contain the latest stable.
- The smallest time unit is milliseconds instead of microseconds. Wherever you see microseconds in Python's datetime API, replace it with milliseconds.
- As there is no operator overloading in JavaScript, the following methods are used for datetime arithmetics:
delta.compare(another): returns one of -1, 0, 1delta.add(addend)delta.subtract(subtrahend)delta.multiply(factor)delta.divide(divisor)
- If wrong arguments are provided, TypeError is raised. However, comprehensive argument validation is yet to be implemented.
- No tzinfo, only timezone. This is more of a status-quo.
- Other functions/methods which are not (yet?) implemented:
ctime,fromordinal,timetuple,toordinal. - The following printf directives are currently not implemented:
%j,%U, and%W. However,%a,%A,%b,%B, and%pare not localised. - Of the scanf directives, only
%d,%m,%Y,%H,%M,%S, and%fare implemented.
- To implement the proleptic Gregorian ordinals:
toordinal,fromordinal. - To validate the constructor arguments.
- To test, document, and improve datetime's interoperability with at least one of the JavaScript libraries that are synced with the Olson database. In other words, find the JavaScript pytz counter-part(s).
MIT. Do as you please and praise the snake gods.