記錄時間和時間格式的轉換肺然,在程序中應用廣泛竿屹,基本所有語言自帶點處理時間和日期的函數(shù),什么轉換成帶時區(qū),不帶時區(qū)防症,精確到年评甜,月肘交,日氯窍,時,分锤躁,甚至精確到秒搁料,24h制的,12h制的∠敌撸看似足夠多足夠全面郭计,但是自己一用就發(fā)現(xiàn),討厭椒振,都不是自己想要的格式昭伸。拿個紙筆自己算吧,除六十澎迎,再除60庐杨,等等這是該進位了吧。夹供。灵份。就問你暈不暈,煩不煩哮洽。
先來介紹兩個時間概念:
有時區(qū)的時間(timestamp with timezone):本地時間填渠,也就是數(shù)據(jù)庫服務器的時區(qū)改了,或者把應用服務器的時區(qū)(北京時間比UTC時間快8個小時)
無時區(qū)的時間(timestamp without timezone):當前時間是指從一個基準時間(1970-1-1 00:00:00 +0:00)鸟辅,到現(xiàn)在的秒數(shù)氛什,用一個整數(shù)表示。
一般數(shù)據(jù)庫存時間戳都是用的第二種匪凉,別問我為什么枪眉,都是血的教訓。服務器的時區(qū)一個不小心手滑選成了某個不知名的地區(qū)再层,自動儲存的時間戳天知道真實時間是幾點贸铜,還得Google一下對應關系,自己手動轉換树绩。。隐轩。
再就是舉幾個開發(fā)語言自帶對于時間轉化功能(以JavaScript為例):
這種Date類型的方法饺饭,還有一些常見用法,網(wǎng)上一搜一大堆职车,這里推薦一個https://blog.csdn.net/ligang2585116/article/details/52145580最好的理解方法還是自己跑跑瘫俊,試試看鹊杖。
還有個第三方插件moment.js??https://momentjs.com/?用的時候自己找找document對應自己需要的功能。
在以上均不能滿足需求之后扛芽,讓我們來自己寫一寫:
做simulation的時候往往拿到的是從0開始以秒為單位的時間間隔整數(shù)
這就需要轉換成可讀的格式 00:00:00.在此我們假定起始記錄時間為06:00:00
思考過程如下:
1)如何確定小時:1h=60min=60*60s=>1s=1/(60*1000)min=1/(60*60)h. 現(xiàn)有時間為秒骂蓖,那么當然是來個除法啦,得到結果3.2小時怎么辦川尖?當然是向下取整登下,切記可別四舍五入!叮喳!超過24h怎么辦被芳?取余取余,25h人話叫1Day1h.
2)然后你只需要Google 一下“js 如何向下取整馍悟,如何進行數(shù)學運算”畔濒,然后就是大膽的試
好毅整,ctrl+B運行一下:
原因就是出在變量類型上诽俯,讓我們console一下看看:
敲黑板。重點來了承粤。請問一加一在什么情況下不等于2暴区,答:在字符串相加的情況下(1+1=11,數(shù)字相加1+1=2)辛臊。
兩種方法供你選擇:
3)如何轉換成雙字符仙粱?比如
這是你需要讓電腦判斷一下你的整數(shù)是否為兩位數(shù),如果不足為彻舰,前面補零伐割,自己寫寫看:
補位要字符串相加硬霍,所以不是0 是“0”.
同樣的方法計算并處理分鐘和秒數(shù):
24小時制度對于老年人來說還是不那么友好粱玲,讓我們來進一步改成給易讀的12小時制度吧。
思考過程如下:
1)我們是怎么區(qū)分AM和PM的呢拜轨?以正午12點為界限抽减,如果小時數(shù)超過12,那么就是PM橄碾,等于12卵沉,如果分鐘數(shù)大于0那么就是PM,12:00:00依然是AM堪嫂。
2)輸入格式為hh:mm:ss偎箫,當然以“:”為分隔識別符,就很輕易將時分秒提取出來皆串。
3)自行Google并學習split()如何使用淹办。
現(xiàn)在我們已經(jīng)有了普遍適用的原創(chuàng)function,當然從性能或者效率來說一定有更好的恶复,但是重要的不是結果而是整個思考過程怜森。學習不是抄襲,別人的碼終歸是別人的谤牡,首先你得往前走副硅,然后再往高處看。
至少現(xiàn)在你應該掌握:
1)字符串和數(shù)字的轉換
2)字符串的加減以及數(shù)字的加減
3)邏輯運算翅萤,與或非恐疲。比較大小,取余套么,取整等一系列JS中Math的相關使用
4)字符串的分隔split()使用培己,數(shù)組使用
5)? 如何定義一個函數(shù),如何傳參胚泌,回調(diào)
6)console.log()輸出