period-js v0.0.2
Period.js
Period.js is (usually) a replacement for the native JavaScript Date object. Period.js requires the native JavaScript Date object, for one function, when the constructor was called without no parameters.
let date = new Period()
Eventually runs this code snippet:
if (Object.keys(periodInit).length === 0) {
let tempDate = new Date(); // <---- see
this.year = tempDate.getFullYear();
this.month = tempDate.getMonth() + 1;
this.day = tempDate.getDate();
this.hours = tempDate.getHours();
this.minutes = tempDate.getMinutes();
this.seconds = tempDate.getSeconds();
this.milliseconds = tempDate.getMilliseconds();
this.timezone = tempDate.getTimezoneOffset() / 60;
}
The variable periodInit
is the parameter to the PeriodValues constructor, from inside the Period constructor. Besides this I never touch the Date object.
Now to the real stuff.
JavaScript's Date object puts display formatting first. This makes it difficult to use for mathematical reasons. I created Period.js to fix that problem, to replace the native Date object with a system of simple functions and variables to make adding, subtracting, replacing, and formatting dates easier than ever.
Quick start
There are many ways to initiate a Period.js object:
- Empty constructor uses the JavaScript Date object to get the current time
let date = new Period();
- Create an object with as many parameters as you want and pass that in with this format:
let initObject = {
year: 2017,
month: 4,
day: 2,
hours: 10,
minutes: 45,
seconds: 15,
milliseconds: 396,
timezone: -4
}
let date = new Period(initObject)
But remember, every one of those parameters is optional.
- Array in specific order:
let initArray = [2017, 4, 2, 10, 45, 15, 396];
// Format: [year, month, day, hours, minutes, seconds, milliseconds]
let date = new Period(initArray);
There is no option for passing in a timezone to the Period constructor when using an array. This is due to confusion about the order of elements. If you want to initiate a timezone, call:
date.setTimezone(timezone);
API
The API is not done at this point, but here are the functions for now. They will be explained individually after:
Period:
constructor(dateObject);
add(label, time);
set(label, time);
addYears(years);
addMonths(months);
addDays(days);
addHours(hours);
addMinutes(minutes);
addSeconds(seconds);
addMilliseconds(milliseconds);
addTimezone(timezone);
setYear(year);
setMonth(month);
setDay(day);
setHour(hour);
setMinute(minute);
setSecond(second);
setMillisecond(millisecond);
setTimezone(timezone);
display(format);
get(label);
next();
this();
last();
Displaying Formatted Dates
This feature is to come soon... There will be a nice way to format Period objects by passing in a string.
Thank You!
This is a fun side project of mine at the moment. I have been working a lot with date manipulation, and the native Date object isn't suited for this. Almost all of the work on this project is being done on the little down time I have on weekends.