Useful Functions cli-time Forgot
Monday, October 3rd, 2016I'm a huge fan of clj-time - it's made so many of the time-related tasks so much simpler. But as is often the case, there are many applications for time that don't really fall into the highly-reusable category. So I don't blame them for not putting this into clj-time, but we needed to find the start of the year, start of the month, and start of the quarter.
The slight wrinkle is that the quarter could be on a few different starting cycles, so we had to be able to allow for that.
(defn start-of-year "Gets the start of the year (midnight, 1 Jan) for the specified date-time." [dt] (date-time (year dt))) (defn start-of-month "Gets the start of the month (midnight) for the specified date-time." [dt] (date-time (year dt) (month dt))) (defn start-of-quarter "Gets the start of the quarter for the specified date time. This function assumes the standard quarterly cycle (Jan-Apr-Jul-Oct). A different cycle can be generated by providing the 1-based index (e.g., 1 => Jan) of the cycle start month." ([dt] (start-of-quarter dt 1)) ([dt start-month] (let [offset (mod (- (month dt) start-month) 3)] (minus (start-of-month dt) (months offset)))))
None of this is Rocket Science, but it's nice to not have to mess with these conversions in the remainder of your code - which is kinda the point of the functional part of the language - no?