aboutsummaryrefslogtreecommitdiff
path: root/src/lib.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.ts')
-rw-r--r--src/lib.ts23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/lib.ts b/src/lib.ts
index 3b0bc68..03b443d 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -582,14 +582,31 @@ export function dateToUnit(date: HistDate, scale: number): number {
}
}
}
-export function dateToScaleDate(date: HistDate, scale: number): HistDate {
+export function dateToScaleDate(date: HistDate, scale: number, upward=false): HistDate {
// Returns a date representing the unit on 'scale' that 'date' is within
if (scale == DAY_SCALE){
return new CalDate(date.year, date.month, date.day);
} else if (scale == MONTH_SCALE){
- return new CalDate(date.year, date.month, 1);
+ if (upward && date.day > 1){
+ return stepDate(new CalDate(date.year, date.month, 1), MONTH_SCALE);
+ } else {
+ return new CalDate(date.year, date.month, 1);
+ }
+ } else if (scale == 1){
+ if (upward && date.month > 1){
+ return stepDate(new CalDate(date.year, 1, 1), 1);
+ } else {
+ if (date.year < MIN_CAL_YEAR){
+ return new YearDate(date.year);
+ } else {
+ return new CalDate(date.year == 0 ? 1 : date.year, 1, 1);
+ }
+ }
} else {
- const year = Math.floor(date.year / scale) * scale;
+ let year = Math.floor(date.year / scale) * scale;
+ if (upward && moduloPositive(date.year, scale) > 0){
+ year += scale;
+ }
if (year < MIN_CAL_YEAR){
return new YearDate(year);
} else {