From d73a31e664bc8d13930909c3f098a113efe059f5 Mon Sep 17 00:00:00 2001 From: Jesse Gumm Date: Sat, 7 Nov 2015 11:39:24 -0600 Subject: [PATCH] Add beginning_X/0 variations --- README.markdown | 10 ++++++++-- src/qdate.erl | 22 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.markdown b/README.markdown index 5310710..280b36f 100644 --- a/README.markdown +++ b/README.markdown @@ -621,9 +621,11 @@ ok ## Date Truncation (Beginning of X) -Sometimes you need to truncate a time (say, the beginning of the current month). +Sometimes you need to truncate a time (say, the beginning of the current +month). -This is abstracted to `beginning_X` functions, which return a date/time format with the dates and times truncated to the specified level. +This is abstracted to `beginning_X` functions, which return a date/time format +with the dates and times truncated to the specified level. + `beginning_minute(Date)` + `beginning_hour(Date)` @@ -631,6 +633,10 @@ This is abstracted to `beginning_X` functions, which return a date/time format w + `beginning_month(Date)` + `beginning_year(Date)` +There are also 0-arity versions of the above, in which `Date` is assumed to be +"right now". For example, calling `qdate:beginning_month()` would return +midnight on the first day of the current month. + ## Date Arithmetic The current implementation of qdate's date arithmetic returns Unixtimes. diff --git a/src/qdate.erl b/src/qdate.erl index 3311573..4ae135d 100644 --- a/src/qdate.erl +++ b/src/qdate.erl @@ -26,11 +26,16 @@ -export([ beginning_minute/1, + beginning_minute/0, beginning_hour/1, + beginning_hour/0, beginning_day/1, + beginning_day/0, %beginning_week/2, %% needs to be /2 because we also need to define what day is considered "beginning of week", since some calendars do sunday and some do monday. We'll hold off on implementation here beginning_month/1, - beginning_year/1 + beginning_month/0, + beginning_year/1, + beginning_year/0 ]). -export([ @@ -337,22 +342,37 @@ to_now(Disamb, ToParse) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Beginning/Truncation %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +beginning_minute() -> + beginning_minute({date(),time()}). + beginning_minute(Date) -> {{Y,M,D},{H,M,_}} = to_date(Date), {{Y,M,D},{H,M,0}}. +beginning_hour() -> + beginning_hour({date(),time()}). + beginning_hour(Date) -> {{Y,M,D},{H,_,_}} = to_date(Date), {{Y,M,D},{H,0,0}}. +beginning_day() -> + beginning_day({date(),time()}). + beginning_day(Date) -> {{Y,M,D},{_,_,_}} = to_date(Date), {{Y,M,D},{0,0,0}}. +beginning_month() -> + beginning_month({date(),time()}). + beginning_month(Date) -> {{Y,M,_},{_,_,_}} = to_date(Date), {{Y,M,1},{0,0,0}}. +beginning_year() -> + beginning_year({date(),time()}). + beginning_year(Date) -> {{Y,_,_},{_,_,_}} = to_date(Date), {{Y,1,1},{0,0,0}}.