aboutsummaryrefslogtreecommitdiff
path: root/src/duration.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/duration.ts')
-rw-r--r--src/duration.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/duration.ts b/src/duration.ts
new file mode 100644
index 0000000..18849a0
--- /dev/null
+++ b/src/duration.ts
@@ -0,0 +1,26 @@
+import moment from 'moment';
+
+export type TimeUnit = moment.unitOfTime.DurationConstructor;
+
+export class Duration {
+ value: number;
+ unit: TimeUnit;
+ constructor(value: number, unit: TimeUnit) {
+ this.value = value
+ this.unit = unit
+ }
+
+ isValid() { return moment.duration(this.value, this.unit).isValid(); }
+ toMoment() {
+ let m = moment.duration(this.value, this.unit);
+ if (m.isValid()) return m;
+ return null;
+ }
+
+ static days(n: number) { return new Duration(n, 'days'); }
+ static weeks(n: number) { return new Duration(n, 'weeks'); }
+ static months(n: number) { return new Duration(n, 'months'); }
+
+ deflate() { return { value: this.value, unit: this.unit }; }
+ static inflate = (obj: { value: number, unit: TimeUnit }) => new Duration(obj.value, obj.unit);
+}