     /// Take you to monday 00:00:00 current week
     ///
     /// - Returns: Date
-    public func startOfWeek() -> Date {
-        let calendar = Calendar.current
+    public func startOfWeek(calendar: Calendar = Calendar()) -> Date {
         var components = calendar.dateComponents([.weekOfYear, .yearForWeekOfYear], from: self.startOfDay())
-        components.weekday = 2 // Monday
+        components.weekday = .monday
         let startOfWeek = calendar.date(from: components)!
         return startOfWeek
     }

    /// Start of month
    ///
    /// - Returns: Date
    public func startOfMonth() -> Date {
        let calendar = Calendar.current
        let unitFlags = Set<Calendar.Component>([.year, .month])
        let components = calendar.dateComponents(unitFlags, from: self)
        return calendar.date(from: components)!

    /// Returns the next `weekday` starting from the provided date.
    ///
    /// - Returns: Date
    public func next(_ weekday: Weekday) throws -> Date {
        var date = self
        let components = Calendar(identifier: .gregorian).dateComponents([.weekday], from: date)
        guard let day = components.weekday else {
            throw Abort.serverError
