diff --git a/README.md b/README.md
index f846d89..6f7b2e8 100644
--- a/README.md
+++ b/README.md
@@ -88,6 +88,9 @@ Prints `Last updated: a few seconds ago`
Prints `Last updated: a few seconds`
## amCalendar pipe
+Takes optional `formats` argument (defaults to now)
+and `referenceTime` argument that could be output formats object or callback function.
+See [momentjs docs](http://momentjs.com/docs/#/displaying/calendar-time/) for details.
``` typescript
@Component({
@@ -98,7 +101,37 @@ Prints `Last updated: a few seconds`
})
```
-Prints `Last updated: Today at 14:00`
+Prints `Last updated: Today at 14:00` (default referenceTime is today by default)
+
+``` typescript
+@Component({
+ selector: 'app',
+ template: `
+ Last updated:
+ `
+})
+export class AppComponent {
+ nextDay: Date;
+
+ constructor() {
+ this.nextDay = new Date();
+ nextDay.setDate(nextDay.getDate() + 1);
+ }
+}
+```
+
+Prints `Last updated: Yesterday at 14:00` (referenceTime is tomorrow)
+
+``` typescript
+@Component({
+ selector: 'app',
+ template: `
+ Last updated:
+ `
+})
+```
+
+Prints `Last updated: Same Day at 2:00 PM`
## amDateFormat pipe
diff --git a/src/calendar.pipe.spec.ts b/src/calendar.pipe.spec.ts
index c437d90..396327b 100644
--- a/src/calendar.pipe.spec.ts
+++ b/src/calendar.pipe.spec.ts
@@ -19,5 +19,24 @@ describe('CalendarPipe', () => {
it('should transform the start of the current day to "Today at 12:00 AM"', () => {
expect(pipe.transform(moment().startOf('day'))).toBe('Today at 12:00 AM');
});
+
+ it('should transform the start of the current day to "Yesterday at 12:00 AM"', () => {
+ let testDate = moment().startOf('day');
+ let referenceTime = moment().clone().add(1, 'day');
+ expect(pipe.transform(testDate, referenceTime)).toBe('Yesterday at 12:00 AM');
+ });
+
+ it('should transform date to "January 13th 2016, 1:23:45 AM"', () => {
+ let testDate = new Date(2016, 0, 13, 1, 23, 45);
+ let formats = { sameElse: 'MMMM Do YYYY, h:mm:ss A' };
+ expect(pipe.transform(testDate, formats)).toBe('January 13th 2016, 1:23:45 AM');
+ });
+
+ it('should support any order of arguments', () => {
+ let testDate = moment();
+ let referenceTime = moment().clone().add(1, 'day');
+ let formats = { lastDay: '[Last day at] h:mm A' };
+ expect(pipe.transform(testDate, formats, referenceTime)).toBe(pipe.transform(testDate, referenceTime, formats));
+ });
});
});
diff --git a/src/calendar.pipe.ts b/src/calendar.pipe.ts
index 2f57312..4f71e3c 100644
--- a/src/calendar.pipe.ts
+++ b/src/calendar.pipe.ts
@@ -36,7 +36,20 @@ export class CalendarPipe implements PipeTransform, OnDestroy {
}
transform(value: Date | moment.Moment, ...args: any[]): any {
- return momentConstructor(value).calendar();
+ let formats: any = null;
+ let referenceTime: any = null;
+
+ for (let i = 0, len = args.length; i < len; i++) {
+ if (args[i] !== null) {
+ if (typeof args[i] === 'object' && !moment.isMoment(args[i])) {
+ formats = args[i];
+ } else {
+ referenceTime = momentConstructor(args[i]);
+ }
+ }
+ }
+
+ return momentConstructor(value).calendar(referenceTime, formats);
}
ngOnDestroy(): void {