* Changed the valid inputs to actually conform to a standard
* Fixed a bunch of bugs + Year
This commit is contained in:
parent
c596812d30
commit
a88351922f
|
@ -1,2 +1,35 @@
|
|||
export type monthType = "single" | "double" | "short" | "long";
|
||||
export type dateType = "single" | "double" | "short" | "long" | "dowsingle" | "dowdouble";
|
||||
// All mappings according to: https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters
|
||||
|
||||
// ############################## [ Common Formats ] ##############################
|
||||
|
||||
export type commonDateFormats = "d/m/Y" | "m/d/Y" | "d/m/Y h:i A" | "d/m/Y H:i" | "m/d/Y h:i A" | "m/d/Y H:i";
|
||||
|
||||
// ############################## [ Time Formats ] ##############################
|
||||
|
||||
|
||||
|
||||
// ############################## [ Date Formats ] ##############################
|
||||
|
||||
// =-=-=-=-=-=-=-=-=-=-= [ Date ] =-=-=-=-=-=-=-=-=-=-=
|
||||
const dtypes = [ "j", "d", "D", "l", "w" ];
|
||||
/**
|
||||
* Possible formats for the date
|
||||
*/
|
||||
export type dateType = (typeof dtypes)[number];
|
||||
export const isDateType = (x: any): x is dateType => dtypes.includes(x);
|
||||
|
||||
// =-=-=-=-=-=-=-=-=-=-= [ Month ] =-=-=-=-=-=-=-=-=-=-=
|
||||
const mtypes = [ "n", "m", "M", "F" ];
|
||||
/**
|
||||
* Possible formats for the month
|
||||
*/
|
||||
export type monthType = (typeof mtypes)[number];
|
||||
export const isMonthType = (x: any): x is monthType => mtypes.includes(x);
|
||||
|
||||
// =-=-=-=-=-=-=-=-=-=-= [ Year ] =-=-=-=-=-=-=-=-=-=-=
|
||||
const yeartypes = [ "L", "o", "y", "Y" ];
|
||||
/**
|
||||
* Possible formats for the year
|
||||
*/
|
||||
export type yearType = (typeof yeartypes)[number];
|
||||
export const isYearType = (x: any): x is yearType => yeartypes.includes(x);
|
118
src/index.ts
118
src/index.ts
|
@ -1,9 +1,6 @@
|
|||
import { dayDictionary } from "./Dictionaries/dateDictionary";
|
||||
import { monthDictionary } from "./Dictionaries/monthDictionary";
|
||||
import { dateType, monthType } from "./Types/formatTypes";
|
||||
|
||||
|
||||
|
||||
import { dayDictionary } from "./Dictionaries/dateDictionary";
|
||||
import { monthDictionary } from "./Dictionaries/monthDictionary";
|
||||
import { commonDateFormats, dateType, monthType, yearType } from "./Types/formatTypes";
|
||||
|
||||
|
||||
/**
|
||||
|
@ -35,59 +32,110 @@ export default class TymeJS {
|
|||
return this.ts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns a string representation of a date. The format of the string depends on the locale.
|
||||
*/
|
||||
public toString(): string {
|
||||
// Return the current date as a string
|
||||
return this.getDateObject().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the current timestamp to a workable format
|
||||
* @param dateTimeFormat
|
||||
* @returns The date formatted in the provided dateTimeFormat
|
||||
*/
|
||||
public format(dateTimeFormat: string): string {
|
||||
public format(dateTimeFormat: string | commonDateFormats): string {
|
||||
/**
|
||||
* The formatted date
|
||||
*/
|
||||
let formattedDate = ``;
|
||||
|
||||
// Go through all of the characters of the dateTimeFormat string
|
||||
for ( let char of Array.from(dateTimeFormat) ) {
|
||||
|
||||
}
|
||||
|
||||
// Return the formatted date
|
||||
return formattedDate;
|
||||
}
|
||||
|
||||
|
||||
// ############################## [ Time Formats ] ##############################
|
||||
|
||||
|
||||
// ############################## [ Date Formats ] ##############################
|
||||
|
||||
/**
|
||||
* Get the current month
|
||||
*
|
||||
* @param t The format to get the date in
|
||||
* @returns A string of the formatted date
|
||||
*/
|
||||
public getMonth(mType: monthType): string {
|
||||
// get the index of the current month
|
||||
let monthIndex: number = this.ts.getMonth();
|
||||
public getDate(t: dateType): string | number {
|
||||
|
||||
if ( mType === "single" ) {
|
||||
return String(monthIndex + 1);
|
||||
} else if ( mType === "double" ) {
|
||||
return String(monthIndex + 1).padStart(2, "0");
|
||||
} else if ( mType === "short" ) {
|
||||
return monthDictionary[monthIndex].slice(0, 3);
|
||||
} else {
|
||||
return monthDictionary[monthIndex];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public getDate(dType: dateType): string {
|
||||
|
||||
if ( dType == "single" ) {
|
||||
if ( t == "j" ) {
|
||||
// get the index of the current day
|
||||
let currentDate: number = this.ts.getDate();
|
||||
return String(currentDate);
|
||||
} else if ( dType == "double" ) {
|
||||
return currentDate;
|
||||
} else if ( t == "d" ) {
|
||||
// get the index of the current day
|
||||
let currentDate: number = this.ts.getDate();
|
||||
return String(currentDate).padStart(2, "0");
|
||||
} else if ( dType == 'dowsingle' ) {
|
||||
} else if ( t == 'w' ) {
|
||||
return String(this.ts.getDay());
|
||||
} else if ( dType == 'dowdouble' ) {
|
||||
return String(this.ts.getDay()).padStart(2, "0");
|
||||
} else if ( dType == "short") {
|
||||
return String(dayDictionary[this.ts.getDay() - 1]);
|
||||
} else {
|
||||
return String(dayDictionary[this.ts.getDay() - 1]).slice(0, 3);
|
||||
} else if ( t == "l") {
|
||||
return String(dayDictionary[this.ts.getDay()]);
|
||||
} else if ( t == 'D' ) {
|
||||
return String(dayDictionary[this.ts.getDay()]).slice(0, 3);
|
||||
}
|
||||
|
||||
throw new Error(`Invalid format for date ${t}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the current date object's month
|
||||
* @param t The format to get the date in
|
||||
* @returns A string of the formatted date
|
||||
*/
|
||||
public getMonth(t: monthType): string | number {
|
||||
// get the index of the current month
|
||||
let monthIndex: number = this.ts.getMonth();
|
||||
|
||||
if ( t === "n" ) {
|
||||
return (monthIndex + 1);
|
||||
} else if ( t === "m" ) {
|
||||
return String(monthIndex + 1).padStart(2, "0");
|
||||
} else if ( t === "M" ) {
|
||||
return monthDictionary[monthIndex].slice(0, 3);
|
||||
} else if ( t === "F" ) {
|
||||
return monthDictionary[monthIndex];
|
||||
}
|
||||
|
||||
throw new Error(`Invalid format for date ${t}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the current date object's year
|
||||
* @param t The format to get the date in
|
||||
* @returns A string of the formatted date
|
||||
*/
|
||||
public getYear(t: yearType): string | number {
|
||||
|
||||
if ( t == "L" ) {
|
||||
return (TymeJS.isLeapYear(this.ts.getFullYear())) ? 1 : 0;
|
||||
} else if ( t == 'Y' ) {
|
||||
return this.ts.getFullYear();
|
||||
} else if ( t == 'y' ) {
|
||||
return String(this.ts.getFullYear()).slice(2);
|
||||
} else if ( t == 'o' ) {
|
||||
throw new Error(`Not yet implemented`);
|
||||
}
|
||||
|
||||
throw new Error(`Invalid format for year ${t}`);
|
||||
}
|
||||
|
||||
public static isLeapYear(year: number): boolean {
|
||||
return new Date(year, 1, 29).getDate() === 29;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
import TymeJS from "../src";
|
||||
|
||||
let startDate: Date = new Date();
|
||||
let d: Date = new Date();
|
||||
|
||||
for ( let i = 0; i < 7; i++ ) {
|
||||
const a = new TymeJS(startDate);
|
||||
console.log(startDate, {
|
||||
single: a.getDate("single"),
|
||||
double: a.getDate("double"),
|
||||
dowsingle: a.getDate("dowsingle"),
|
||||
dowdouble: a.getDate("dowdouble"),
|
||||
full: a.getDate("long"),
|
||||
short: a.getDate("short"),
|
||||
|
||||
const a = new TymeJS(d);
|
||||
console.log(d, {
|
||||
single: a.getDate("j"),
|
||||
double: a.getDate("d"),
|
||||
dowdouble: a.getDate("w"),
|
||||
full: a.getDate("l"),
|
||||
short: a.getDate("D"),
|
||||
});
|
||||
|
||||
startDate.setDate(startDate.getDate() + 1);
|
||||
d.setDate(d.getDate() + 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ for ( let i = 0; i < 12; i++ ) {
|
|||
const a = new TymeJS(currentMonth);
|
||||
|
||||
console.log({
|
||||
single: a.getMonth("single"),
|
||||
double: a.getMonth("double"),
|
||||
full: a.getMonth("long"),
|
||||
short: a.getMonth("short"),
|
||||
single: a.getMonth("n"),
|
||||
double: a.getMonth("m"),
|
||||
full: a.getMonth("F"),
|
||||
short: a.getMonth("M"),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue