Swift - 關于時間差的計算/兩個時間差的比較(二)

Date相關轉(zhuǎn)換參考

1. 根據(jù)時間戳計算某個時間段的時間 (時間Date類型) [timeInterval 以‘秒 s’單位 例如 一天后 60*60*24]

?static?func?calculationDateFromTimeStamp(timeStamp:String,

timeInterval:TimeInterval) ->Date{

? ? ? ??//根據(jù)時間戳轉(zhuǎn)化Date

? ? ? ? let?interval:TimeInterval=TimeInterval.init(timeStamp)!

? ? ? ? let?date = Date(timeIntervalSince1970: interval)

? ? ? ??return??date.addingTimeInterval(timeInterval)

? ? }

2.根據(jù)時間戳與當前時間的比較

?static?func?compareCurrntTime(timeStamp:String) ->String{

? ? ? ??//計算出時間戳距離現(xiàn)在時間的一個秒數(shù)(..s)

? ? ? ? let?interval:TimeInterval=TimeInterval.init(timeStamp)!

? ? ? ? let?date =Date(timeIntervalSince1970: interval)

? ? ? ? var?timeInterval = date.timeIntervalSinceNow

? ? ? ??//得到的是一個負值 (加' - ' 得正以便后面計算)

? ? ? ? timeInterval = -timeInterval

? ? ? ??//根據(jù)時間差 做所對應的文字描述 (作為返回文字描述)

? ? ? ? var?result:String

? ? ? ?//一分鐘以內(nèi)

? ? ? ??if?interval <60{

? ? ? ? ? ? result ="剛剛"

? ? ? ? ? ? return?result

? ? ? ? }else?if??Int(timeInterval/60) <60{

? ? ? ? ? ?//一小時以內(nèi)

? ? ? ? ? ? result =String.init(format:"%@分鐘前",String(Int(timeInterval/60)))

? ? ? ? ? ? return?result

? ? ? ? }else?if?Int((timeInterval/60)/60) <24{

? ? ? ? ? ? //一天以內(nèi)

? ? ? ? ? ? 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

? ? ? ? }

? ? }

3.比較兩個時間的大小 (一般用作設置活動開始時間/結束時間) (根據(jù)bool類型判斷)


static?func?compareTimeOfSize(startDate:Date, endDate:Date? =nil) ->Bool{

? ? ? ??//當前時間

? ? ? ??let?nowDate =Date.init()


? ? ? ??let calendar:Calendar = Calendar.current

? ? ? ? ?let?unit:Set = [.day,.hour]

? ? ? ??//開始時間不能小于當前時間 B衬蟆J琛哈垢!

? ? ? ? let??commponentTemp:DateComponents= calendar.dateComponents(unit, from: nowDate, to: startDate)

? ? ? ??guard?commponentTemp.day! >0|| commponentTemp.hour! >0else{

? ? ? ? ? ? print("開始時間不能小于當前時間!C适洹!")

? ? ? ? ? ? return?false

? ? ? ? }

? ? ? ??//判斷結束時間是否為空

? ? ? ? if?endDate !=nil? {

? ? ? ? ? ??let??commponent:DateComponents = calendar.dateComponents(unit, from: startDate, to: endDate!)

? ? ? ? ? ??guard?commponent.day! >0|| commponent.hour! >0?else{

? ? ? ? ? ? ? ? print("結束時間不能小于開始時間!2匕摹!")

? ? ? ? ? ? ? ? return?false

? ? ? ? ? ? }

? ? ? ? }

? ? ? ??return true

? ? }

4.比較兩個時間的大小 (一般用作活動\訂單等 倒計時顯示文字處理)

static??func??compareCurrentTimeOfSize(endDate:Date) ->String{

? ? ? ??//當前時間

? ? ? ? let?nowDate =Date.init()


? ? ? ??let calendar:Calendar = Calendar.current

? ? ? ? let?unit:Set = [.day, .hour, .minute, .second]

? ? ? ? let?commponent:DateComponents= calendar.dateComponents(unit, from: nowDate, to: endDate)


? ? ? ? //判斷活動倒計時是否已結束

? ? ? ? guard?commponent.day! >0|| commponent.hour! >0|| commponent.minute! >0|| commponent.second! >0? else{

? ? ? ? ? ? return?"訂單/活動已結束O裳痢4酥蕖!"

? ? ? ? }

? ? ? ??//- 天

? ? ? ? var?dStr:String!

? ? ? ? if?commponent.day! <10{

? ? ? ? ? ? dStr =String.init(format:"%@天","0\( commponent.day !?)")

? ? ? ? }else{

? ? ? ? ? ? dStr =String.init(format:"%@天","\( commponent.day?! )")

? ? ? ? }


? ? ? ? //- 時

? ? ? ? var?hStr:String!

? ? ? ? if?commponent.hour! <10{

? ? ? ? ? ? hStr =String.init(format:"%@時","0\( commponent.hour?! )")

? ? ? ? }else{

? ? ? ? ? ? hStr =String.init(format:"%@時","\( commponent.hour?! )")

? ? ? ? }


? ? ? ? //- 分

? ? ? ? var?mStr:String!

? ? ? ? if?commponent.minute! <10{

? ? ? ? ? ? mStr =String.init(format:"%@分","0\( commponent.minute?! )")

? ? ? ? }else{

? ? ? ? ? ? mStr =String.init(format:"%@分","\( commponent.minute?! )")

? ? ? ? }


? ? ? ? //- 秒

? ? ? ? var?sStr:String!

? ? ? ? if?commponent.second! <10{

? ? ? ? ? ? sStr =String.init(format:"%@秒","0\( commponent.second?! )")

? ? ? ? }else{

? ? ? ? ? ? sStr =String.init(format:"%@秒","\( commponent.second?! )")

? ? ? ? }

? ? ? ??return??String.init(format:"%@%@%@%@", dStr, hStr, mStr, sStr)

? ? }

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末委粉,一起剝皮案震驚了整個濱河市呜师,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贾节,老刑警劉巖汁汗,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異栗涂,居然都是意外死亡知牌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門斤程,熙熙樓的掌柜王于貴愁眉苦臉地迎上來角寸,“玉大人,你說我怎么就攤上這事忿墅”馀海” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵球匕,是天一觀的道長纹磺。 經(jīng)常有香客問我,道長亮曹,這世上最難降的妖魔是什么橄杨? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮照卦,結果婚禮上式矫,老公的妹妹穿的比我還像新娘。我一直安慰自己役耕,他們只是感情好采转,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬痘,像睡著了一般故慈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上框全,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天察绷,我揣著相機與錄音,去河邊找鬼津辩。 笑死拆撼,一個胖子當著我的面吹牛容劳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闸度,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竭贩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莺禁?” 一聲冷哼從身側響起留量,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睁宰,沒想到半個月后肪获,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡柒傻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年孝赫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片红符。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡青柄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出预侯,到底是詐尸還是另有隱情致开,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布萎馅,位于F島的核電站双戳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糜芳。R本人自食惡果不足惜飒货,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峭竣。 院中可真熱鬧塘辅,春花似錦、人聲如沸皆撩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扛吞。三九已至呻惕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滥比,已是汗流浹背亚脆。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留守呜,地道東北人型酥。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像查乒,于是被迫代替她去往敵國和親弥喉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容