Skip to content

Commit

Permalink
Merge pull request #14 from subeshb1/feature/add_parsing
Browse files Browse the repository at this point in the history
Add string formatting
  • Loading branch information
subeshb1 committed May 9, 2020
2 parents be8b964 + f5defb5 commit 4d9b0ae
Show file tree
Hide file tree
Showing 2 changed files with 1,520 additions and 256 deletions.
158 changes: 88 additions & 70 deletions src/nepali-date-converter.ts
Original file line number Diff line number Diff line change
@@ -1,68 +1,71 @@

import { convertToAD, convertToBS, IYearMonthDate, IAdBs } from './nepali-date-helper'

import {
convertToAD,
convertToBS,
IYearMonthDate,
IAdBs,
format,
Language
} from './nepali-date-helper'

const dateSymbol = Symbol('Date')
const daySymbol = Symbol('Day')
const yearSymbol = Symbol('Year')
const monthSymbol = Symbol('Month')
const jsDateSymbol = Symbol('JSDate')
const convertToBSMethod = Symbol('convertToBS()');
const convertToADMethod = Symbol('convertToAD()');
const setAdBs = Symbol('setAdBs()');
const setDayYearMonth = Symbol('setDayYearMonth()');
const convertToBSMethod = Symbol('convertToBS()')
const convertToADMethod = Symbol('convertToAD()')
const setAdBs = Symbol('setAdBs()')
const setDayYearMonth = Symbol('setDayYearMonth()')
export default class NepaliDate {
private [jsDateSymbol]: Date;
private [yearSymbol]: number;
private [dateSymbol]: number;
private [daySymbol]: number;
private [monthSymbol]: number;

constructor(value?: string | number | Date);
constructor(year: number, monthIndex: number, day: number);
private [jsDateSymbol]: Date
private [yearSymbol]: number
private [dateSymbol]: number
private [daySymbol]: number
private [monthSymbol]: number
static language: Language = Language.en
constructor(value?: string | number | Date)
constructor(year: number, monthIndex: number, day: number)
constructor() {
const constructorError = new Error("Invalid constructor arguments");
const constructorError = new Error('Invalid constructor arguments')
if (arguments.length === 0) {
this[convertToBSMethod](new Date());
}
else if (arguments.length === 1) {
const argument = arguments[0];
this[convertToBSMethod](new Date())
} else if (arguments.length === 1) {
const argument = arguments[0]
switch (typeof argument) {
case "number":
case 'number':
this[convertToBSMethod](new Date(argument))
break;
case "string":
break;
case "object":
break
case 'string':
break
case 'object':
if (argument instanceof Date) {
this[convertToBSMethod](argument)
} else {
throw constructorError;
throw constructorError
}
break;
break
default:
throw constructorError
}
} else if (arguments.length <= 3) {
this[setDayYearMonth](arguments[0], arguments[1], arguments[2])
this[convertToADMethod]();
this[convertToADMethod]()
} else {
throw constructorError
}
}

private [setDayYearMonth](year: number, month: number = 0, date: number = 1, day: number = 0) {
this[yearSymbol] = year;
this[monthSymbol] = month;
this[dateSymbol] = date;
this[daySymbol] = day;
this[yearSymbol] = year
this[monthSymbol] = month
this[dateSymbol] = date
this[daySymbol] = day
}

toJsDate(): Date {
return this[jsDateSymbol];
return this[jsDateSymbol]
}


getDate(): number {
return this[dateSymbol]
}
Expand All @@ -72,13 +75,13 @@ export default class NepaliDate {
}

setDate(date: number) {
const oldDate = this[dateSymbol];
const oldDate = this[dateSymbol]
try {
this[dateSymbol] = date;
this[convertToADMethod]();
this[dateSymbol] = date
this[convertToADMethod]()
} catch (e) {
this[dateSymbol] = oldDate;
throw e;
this[dateSymbol] = oldDate
throw e
}
}

Expand All @@ -88,29 +91,36 @@ export default class NepaliDate {

getDateObject(): IAdBs {
return {
BS: {
year: this[yearSymbol],
month: this[monthSymbol],
date: this[dateSymbol],
day: this[daySymbol]
},
AD: {
year: this[jsDateSymbol].getFullYear(),
month: this[jsDateSymbol].getMonth(),
date: this[jsDateSymbol].getDate(),
day: this[jsDateSymbol].getDay(),
}
BS: this.getBS(),
AD: this.getAD()
}
}
getBS(): IYearMonthDate {
return {
year: this[yearSymbol],
month: this[monthSymbol],
date: this[dateSymbol],
day: this[daySymbol]
}
}

getAD(): IYearMonthDate {
return {
year: this[jsDateSymbol].getFullYear(),
month: this[jsDateSymbol].getMonth(),
date: this[jsDateSymbol].getDate(),
day: this[jsDateSymbol].getDay()
}
}

setMonth(month: number) {
const oldMonth = this[monthSymbol];
const oldMonth = this[monthSymbol]
try {
this[monthSymbol] = month;
this[convertToADMethod]();
this[monthSymbol] = month
this[convertToADMethod]()
} catch (e) {
this[monthSymbol] = oldMonth;
throw e;
this[monthSymbol] = oldMonth
throw e
}
}

Expand All @@ -119,39 +129,47 @@ export default class NepaliDate {
}

setYear(year: number) {
const oldYear = this[yearSymbol];
const oldYear = this[yearSymbol]
try {
this[yearSymbol] = year;
this[convertToADMethod]();
this[yearSymbol] = year
this[convertToADMethod]()
} catch (e) {
this[yearSymbol] = oldYear;
throw e;
this[yearSymbol] = oldYear
throw e
}
}

format(formatString: string, language: Language): string {
return format(this.getBS(), formatString, language)
}

static parse() {
return new NepaliDate();
return new NepaliDate()
}
static now() {
return new NepaliDate();
return new NepaliDate()
}

static fromAD(date: Date) {
return new NepaliDate(date);
return new NepaliDate(date)
}

private [convertToBSMethod](date: Date) {
const { AD, BS } = convertToBS(date);
this[setAdBs](AD, BS);
const { AD, BS } = convertToBS(date)
this[setAdBs](AD, BS)
}

private [setAdBs](AD: IYearMonthDate, BS: IYearMonthDate) {
this[setDayYearMonth](BS.year, BS.month, BS.date, BS.day);
this[jsDateSymbol] = new Date(AD.year, AD.month, AD.date);
this[setDayYearMonth](BS.year, BS.month, BS.date, BS.day)
this[jsDateSymbol] = new Date(AD.year, AD.month, AD.date)
}

private [convertToADMethod]() {
const { AD, BS } = convertToAD({ year: this[yearSymbol], month: this[monthSymbol], date: this[dateSymbol] });
this[setAdBs](AD, BS);
const { AD, BS } = convertToAD({
year: this[yearSymbol],
month: this[monthSymbol],
date: this[dateSymbol]
})
this[setAdBs](AD, BS)
}
}
Loading

0 comments on commit 4d9b0ae

Please sign in to comment.