swift5.0- 时间戳、日期、年月日、天数

时间戳、日期、年月日、天数的计算很常用,没有一个系统的统计,用到的时候需要到处寻找。使用的时候记录下来,方便自己也方便别人需要的时候查看!

获取当前的时间戳10位
    class func getCurrentTimeInTravael() -> TimeInterval {
        return NSDate().timeIntervalSince1970
    }
获取当前的日期
    class func getCurrentDatePoint() -> String {
        let now = Date()
        let dformatter = DateFormatter()
        dformatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dformatter.string(from: now)
    }
获取明天年月日
 class func getTomorrowDate() -> String {
        let now = Date()
        let dformatter = DateFormatter()
        dformatter.dateFormat = "yyyy年MM月dd日"
        let nextDate:TimeInterval = TimeInterval(24*60*60)
        let sDate = now.addingTimeInterval(nextDate)
        return dformatter.string(from: sDate) 
    }
时间戳转换为Date类型
class func getDateFromTimeStamp(timeStamp:String) ->Date {
      let interval:TimeInterval = TimeInterval.init(timeStamp)!
      return Date(timeIntervalSince1970: interval)
  }
时间格式转换成时间戳
  class func dateStrToTimeInterval(dateStr: String) -> Int  {
        let dateformatter = DateFormatter()
        dateformatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        let date = dateformatter.date(from: dateStr)
        let dateTimeInterval:TimeInterval = date!.timeIntervalSince1970
        return Int(dateTimeInterval)
    }
时间格式转换为Date类型
  • print(dateformatter.date(from: time)!)不要这样打印去看date ,看到的跟你输入的不一样但是它并不是错误的。可以采用下面的方式打印查看 print(dateformatter.string(from: date))
 class func timeStrToDate(time:String) -> Date {
       let dateformatter = DateFormatter()
       dateformatter.dateFormat = "yyyy年MM月dd日"
       return dateformatter.date(from: time)!
   }
获取当前年份和月份和日
class func getCurrentYearMonthDay() -> (Int, Int, Int) {
        let calendar = Calendar.current
        let dateComponets = calendar.dateComponents([Calendar.Component.year,Calendar.Component.month,Calendar.Component.day], from: Date())
        return (dateComponets.year!, dateComponets.month!, dateComponets.day!)
    }
获取当前月的总天数
    class func getCurentMonthDays() -> Int {
        let calendar = Calendar.current
        let range = calendar.range(of: Calendar.Component.day, in: Calendar.Component.month, for: Date())
        return range!.count
    }
根据date获取是周几
 func getWeedayFromeDate(date: Date) -> String {
        let calendar = Calendar.current
        let dateComponets = calendar.dateComponents([Calendar.Component.year,Calendar.Component.month,Calendar.Component.weekday,Calendar.Component.day], from: date)
        //获取到今天是周几 1(星期天) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
        let weekDay = dateComponets.weekday
        switch weekDay {
        case 1:
            return "星期天"
        case 2:
           return  "星期一"
        case 3:
            return "星期二"
        case 4:
            return "星期三"
        case 5:
            return "星期四"
        case 6:
            return "星期五"
        case 7:
            return "星期六"
        default:
            return ""
        }
    }
根据时间戳与当前时间的比较(类似朋友圈的时间显示)
    class func compareCurrntTime(timeStamp:String) -> String {
        //计算出时间戳距离现在时间的一个秒数(..s)
        let interval:TimeInterval=TimeInterval(timeStamp)!
        let date = Date (timeIntervalSince1970: interval)
        var timeInterval = date.timeIntervalSinceNow
        //得到的是一个负值 (加' - ' 得正以便后面计算)
        timeInterval = -timeInterval
        //根据时间差 做所对应的文字描述 (作为返回文字描述)
        var result:String
            //一分钟以内
        if interval < 60{
            result = "刚刚"
            return result
        } else if Int(timeInterval/60) < 60{
            //一小时以内
            result = String.init(format:"%@分钟前",String(Int(timeInterval/60)))
            return result
        } else if Int((timeInterval/60)/60) < 24{
            //一天以内
            result = String.init(format:"%@小时前",String(Int((timeInterval/60)/60)))
            return result
        }else{
            //超过一天的
            let dateformatter = DateFormatter()
            //自定义日期格式
            dateformatter.dateFormat="yyyy年MM月dd日 HH:mm"
            result = dateformatter.string(from: date as Date)
            return result
        }
    }
得到本每周 开始 和 结束的时间

    class func getCurrentWeekDays() -> (String, String) {
        let now = Date()
        let calendar = Calendar.current
        let dateComponets = calendar.dateComponents([Calendar.Component.year,Calendar.Component.month,Calendar.Component.weekday,Calendar.Component.day], from: now)
        //获取到今天是周几 1(星期天) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
        let weekDay = dateComponets.weekday
        // 得到几号
        let day = dateComponets.day        
        // 计算当前日期和这周的星期一和星期天差的天数
        var firstDiff = 0
        var lastDiff = 0
        if weekDay == 1 {
            firstDiff = 1
            lastDiff = 0
        } else {
            firstDiff = calendar.firstWeekday - weekDay!+1;
            lastDiff = 9 - weekDay!-1;
        }
        var firstDayComp = calendar.dateComponents([Calendar.Component.year,Calendar.Component.month,Calendar.Component.day], from: now)
        firstDayComp.day = day! + firstDiff
        let firstDayOfWeek = calendar.date(from: firstDayComp)
        var lastDayComp = calendar.dateComponents([Calendar.Component.year,Calendar.Component.month,Calendar.Component.day], from: now)
        lastDayComp.day = day! + lastDiff
        let lastDayOfWeek = calendar.date(from: lastDayComp)
        let formater = DateFormatter()
       formater.dateFormat="yyyy年MM月dd日"
        let startW = formater.string(from: firstDayOfWeek!)
        let endW = formater.string(from: lastDayOfWeek!)
        return (startW, endW)
    }
检测日期
  class func checkDate(str: String) -> String {
        let format = DateFormatter()
        if let date = format.date(from: str) {
            if Calendar.current.isDateInToday(date) {
                return "日期是今天"
            } else if Calendar.current.isDateInYesterday(date) {
                return "日期是昨天"
            } else if Calendar.current.isDateInTomorrow(date) {
                return "日期是明天"
            } else if Calendar.current.isDateInWeekend(date) {
                return "日期是周末"
            } else if Calendar.current.isDate(date, inSameDayAs: Date()) {
                return "日期是今天,也就是传入的和今天的是相同的日期"
            } else {
                return ""
            }
        }
        return ""
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354