当前位置: 首页 > 面试题库 >

本月的第一天和最后一天迅速

龚玄天
2023-03-14
问题内容

我正在设法迅速获得每月的第一天和最后一天。

到目前为止,我有以下内容:

let dateFormatter = NSDateFormatter()
let date = NSDate()
dateFormatter.dateFormat = "yyyy-MM-dd"
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date)

let month = components.month
let year = components.year

let startOfMonth = ("\(year)-\(month)-01")

但是我不确定如何获得最后的约会。我是否缺少内置方法?显然,它必须考虑leap年等。


问题答案:

您只需使用以下命令即可获得每月的第一天

let components = calendar.components([.Year, .Month], fromDate: date)
let startOfMonth = calendar.dateFromComponents(components)!
print(dateFormatter.stringFromDate(startOfMonth)) // 2015-11-01

要获得该月的最后一天,请添加一个月并减去一天:

let comps2 = NSDateComponents()
comps2.month = 1
comps2.day = -1
let endOfMonth = calendar.dateByAddingComponents(comps2, toDate: startOfMonth, options: [])!
print(dateFormatter.stringFromDate(endOfMonth)) // 2015-11-30

或者,使用rangeOfUnit为您提供开始时间和月份长度的方法:

var startOfMonth : NSDate?
var lengthOfMonth : NSTimeInterval = 0
calendar.rangeOfUnit(.Month, startDate: &startOfMonth, interval: &lengthOfMonth, forDate: date)

对于月份的最后一天的日期,请加上月份的长度减去一秒:

let endOfMonth = startOfMonth!.dateByAddingTimeInterval(lengthOfMonth - 1)

为Swift5更新:

extension Date {
    var startOfDay: Date {
        return Calendar.current.startOfDay(for: self)
    }

    var startOfMonth: Date {

        let calendar = Calendar(identifier: .gregorian)
        let components = calendar.dateComponents([.year, .month], from: self)

        return  calendar.date(from: components)!
    }

    var endOfDay: Date {
        var components = DateComponents()
        components.day = 1
        components.second = -1
        return Calendar.current.date(byAdding: components, to: startOfDay)!
    }

    var endOfMonth: Date {
        var components = DateComponents()
        components.month = 1
        components.second = -1
        return Calendar(identifier: .gregorian).date(byAdding: components, to: startOfMonth)!
    }

    func isMonday() -> Bool {
        let calendar = Calendar(identifier: .gregorian)
        let components = calendar.dateComponents([.weekday], from: self)
        return components.weekday == 2
    }
}


 类似资料:
  • 问题内容: 亲爱的专业人员, 我有一个查询来获取本月的第一天和最后一天,但是我对本月第一天的时间戳有疑问。 自2015年2月起,我希望获得以下结果: @LastDOM是正确的,但是我没有得到@FirstDOM的时间戳部分的零,我得到了正确的日期,但是是运行脚本的时间。假设是上午8:50,我得到: 修复此小故障的最佳方法是什么? 问候, 缺口 问题答案: 将@FirstDOM转换为如下形式: 我希望

  • 我有一个LocalDate,需要得到一个月的第一天和最后一天。我该怎么做? 我需要获取LocalDate格式的和。 使用Three-Ten LocalDate类。

  • 如何以moment.js中的以下格式获取当月的第一天和最后一天和时间: 2016-09-01 00:00

  • 问题内容: 我正在寻找获取上个月第一天和最后一天的最佳方法。我使用它们进行SQL查询以获取上个月的统计信息。 我认为这是最好的方法,更优化但又不那么全面,有人有另一种方法可以做到这一点吗? 谢谢!! 问题答案: 在PHP 5.3中,您可以使用类:

  • 是否可以使用以下公式计算月的第三个最后一天: 我想要的结果的一些例子: 1月28日 2月25日/26日 3月28日 4月27日 5月29日 6月27日 7月28日 8月28日 9月27日 10月28日 11月27日 十二月二十八日

  • 问题内容: 我在计算本月下一个最后一天何时发送预定的通知时遇到问题。 这是我的代码: 这是导致问题的线,我相信: 如何使用日历正确设置下个月的通知的最后一天? 问题答案: 这将返回当前月份的实际最大值。例如,现在是leap年的2月,因此它返回29作为。