diff --git a/gregorian-calendar/gregorian-calendar-tests.ts b/gregorian-calendar/gregorian-calendar-tests.ts
new file mode 100644
index 0000000000..d364e00fd2
--- /dev/null
+++ b/gregorian-calendar/gregorian-calendar-tests.ts
@@ -0,0 +1,14 @@
+///
+
+import GregorianCalendar = require('gregorian-calendar');
+import GregorianCalendarFormat = require('gregorian-calendar-format');
+
+
+let cal = new GregorianCalendar();
+cal.set(2016, 7, 27, 0, 0, 0, 0);
+
+let fmt = new GregorianCalendarFormat('yyyy-MM');
+
+let calAsStr = fmt.format(cal);
+console.log(calAsStr);
+
diff --git a/gregorian-calendar/gregorian-calendar.d.ts b/gregorian-calendar/gregorian-calendar.d.ts
new file mode 100644
index 0000000000..0bb2ffa934
--- /dev/null
+++ b/gregorian-calendar/gregorian-calendar.d.ts
@@ -0,0 +1,274 @@
+// Type definitions for gregorian-calendar v4.1.4
+// Project: https://github.com/yiminghe/gregorian-calendar
+// Definitions by: Charlie Arnold
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+
+declare module 'gregorian-calendar' {
+
+ class GregorianCalendar {
+
+ constructor(locale?: Object);
+
+ /**
+ * same as call setYear, setMonth, setDayOfMonth ....
+ */
+ set(year: Number, month: Number, dayOfMonth: Number,
+ hourOfDay: Number, minutes: Number, seconds: Number,
+ milliseconds: Number): void;
+
+ /**
+ * set absolute time for current instance
+ */
+ setTime(time: Number): void;
+
+ /**
+ * get absolute time for current instance
+ */
+ getTime(): Number;
+
+ /**
+ * set current date instance's timezone offset (in minutes)
+ */
+ setTimezoneOffset(timezoneOffset: Number): void
+
+ /**
+ * current date instance's timezone offset (in minutes)
+ */
+ getTimezoneOffset(): Number;
+
+ /**
+ * set the year of the given calendar field.
+ */
+ setYear(year: Number): void;
+
+ /**
+ * Returns the year of the given calendar field.
+ */
+ getYear(): Number;
+
+ /**
+ * set the month of the given calendar field. January is 0, you can use enum
+ */
+ setMonth(month: Number): void;
+
+ /**
+ * set the month of the given calendar field without influence month.
+ * 2015-09-29 -> setMonth(2) -> 2015-03-01
+ * 2015-09-29 -> rollSetMonth(2) -> 2015-02-28
+ */
+ rollSetMonth(month: Number): void;
+
+ /**
+ * Returns the month of the given calendar field.
+ */
+ getMonth(): Number;
+
+ /**
+ * set the day of month of the given calendar field.
+ */
+ setDayOfMonth(day: Number): void;
+
+ /**
+ * Returns the day of month of the given calendar field.
+ */
+ getDayOfMonth(): Number;
+
+
+ /**
+ * set the hour of day for the given calendar field.
+ */
+ setHourOfDay(hour: Number): void;
+
+ /**
+ * Returns the hour of day for the given calendar field.
+ */
+ getHourOfDay(): Number
+
+ /**
+ * set the minute of the given calendar field.
+ */
+ setMinutes(minute: Number): void;
+
+ /**
+ * Returns the minute of the given calendar field.
+ */
+ getMinutes(): Number;
+
+ /**
+ * set the second of the given calendar field.
+ */
+ setSeconds(second: Number): void;
+
+ /**
+ * Returns the second of the given calendar field.
+ */
+ getSeconds(): Number;
+
+ /**
+ * set the millisecond of the given calendar field.
+ */
+ setMilliSeconds(second: Number): void;
+
+ /**
+ * Returns the millisecond of the given calendar field.
+ */
+ getMilliSeconds(): Number;
+
+ /**
+ * Returns the week of year of the given calendar field.
+ */
+ getWeekOfYear(): Number;
+
+ /**
+ * Returns the week of month of the given calendar field.
+ */
+ getWeekOfMonth(): Number;
+
+ /**
+ * Returns the day of year of the given calendar field.
+ */
+ getDayOfYear(): Number;
+
+ /**
+ * Returns the day of week of the given calendar field. sunday is 0, monday is 1
+ */
+ getDayOfWeek(): Number;
+
+ /**
+ * Returns the day of week in month of the given calendar field.
+ */
+ getDayOfWeekInMonth(): Number;
+
+ /**
+ * add the year of the given calendar field.
+ */
+ addYear(amount: Number): void;
+
+ /**
+ * add the month of the given calendar field.
+ */
+ addMonth(amount: Number): void;
+
+ /**
+ * add the day of month of the given calendar field.
+ */
+ addDayOfMonth(amount: Number): void;
+
+ /**
+ * add the hour of day of the given calendar field.
+ */
+ addHourOfDay(amount: Number): void;
+
+ /**
+ * add the minute of the given calendar field.
+ */
+ addMinute(amount: Number): void;
+
+ /**
+ * add the second of the given calendar field.
+ */
+ addSecond(amount: Number): void;
+
+ /**
+ * add the millisecond of the given calendar field.
+ */
+ addMilliSecond(amount: Number): void;
+
+ /**
+ * Returns the week number of year represented by this GregorianCalendar.
+ */
+ getWeekYear(): Number;
+
+ /**
+ * Sets this GregorianCalendar to the date given by the date specifiers - weekYear, weekOfYear, and dayOfWeek.
+ * weekOfYear follows the WEEK_OF_YEAR numbering.
+ * The dayOfWeek value must be one of the DAY_OF_WEEK values: SUNDAY to SATURDAY.
+ * weekYear: the week year
+ * weekOfYear: the week number based on weekYear
+ * dayOfWeek: the day of week value
+ */
+ setWeekDate(weekYear: Number, weekOfYear: Number, dayOfWeek: Number): void;
+
+ /**
+ * Returns the number of weeks in the week year
+ */
+ getWeeksInWeekYear(): Number;
+
+ /**
+ * Returns a clone of current instance
+ */
+ clone(): GregorianCalendar;
+
+ equals(other: GregorianCalendar): boolean;
+
+ /**
+ * compare this object and other by day. return -1 0 or 1
+ */
+ compareToDay(other: GregorianCalendar): Number;
+
+ /**
+ * clear all field of current instance
+ */
+ clear(): void;
+ }
+
+ export = GregorianCalendar;
+}
+
+declare module 'gregorian-calendar-format' {
+
+ import GregorianCalendar = require('gregorian-calendar');
+
+ enum DateTimeStyle {
+ /**
+ * full style
+ */
+ FULL = 0,
+ /**
+ * long style
+ */
+ LONG,
+ /**
+ * medium style
+ */
+ MEDIUM,
+ /**
+ * short style
+ */
+ SHORT,
+ }
+
+ class DateTimeFormat {
+
+ public Style: DateTimeStyle;
+
+ /**
+ * @param pattern The format pattern string
+ * @param locale The local of to output (defaults to require('gregorian-calendar/lib/locale/en_US'),
+ * may also be one of:
+ * require('gregorian-calendar/lib/locale/zh_CN')
+ * require('gregorian-calendar/lib/locale/ru_RU')
+ */
+ constructor(pattern: string, locale?: Object);
+
+ /**
+ * format an instance of GregorianCalendar according to pattern
+ */
+ format(calendar: GregorianCalendar): String;
+
+ /**
+ * parse a dateString to an instance of GregorianCalendar according to pattern, it's better to specify calendarLocale, such as
+ * `df.parse('2013-11-12', {locale: require('gregorian-calendar/lib/locale/zh_CN'}));`
+ */
+ parse(dateString: String, {locale: Object}): GregorianCalendar;
+
+ /**
+ * get a predefine GregorianCalendarFormat instance
+ */
+ getDateTimeInstance(dateStyle: DateTimeStyle, timeStyle: DateTimeStyle, locale?: Object): DateTimeFormat;
+ }
+
+ export = DateTimeFormat;
+}
+