close

前言

因為需求需要將2個時間的小時跟分鐘作相減,塞進另一個欄位裡大概是長這樣

08:30 - 00:15 = 08:15

上面的08:15才是我們這次要取得的時間

JavaScript

var time = "08:30";
_startTime = time.split(":");
var startDate = new Date(0, 0, 0, _startTime[0], _startTime[1], 0);
var endDate = new Date(0, 0, 0, 0, 15, 0);
var diff = startDate.getTime() - endDate.getTime();
var hours = Math.floor(diff / 1000 / 60 / 60);
diff -= hours * 1000 * 60 * 60;
var minutes = Math.floor(diff / 1000 / 60);
resultTime = hours + ":" + minutes;

_startTime = 範例上08:30我們要先將小時跟分鐘分開所以用split(":")

在startDate用new Date()取得時間

結果 Sun Dec 31 1899 08:30:00 GMT+0800 (台北標準時間)

_endDate因為我是要固定減15分鐘所以new Date()之後分鐘的位子就固定放15

結果 Sun Dec 31 1899 00:15:00 GMT+0800 (台北標準時間)

將兩個時間轉成年月日時分秒後在使用getTime()方法轉成毫秒數,才能將兩個數字作相減

diff startDate endDate
29700000 -2209073400000 -2209103100000

接著用Math.floor()方法包住取回小時最大整數

Math.floor(29700000 / 1000 / 60 / 60 = 8.25) = 8

那轉換回分鐘比較麻煩要先將轉換出來的小時乘回毫秒數

(29700000 -= 8 * 1000 * 60 * 60) = -900000

一樣用Math.floor()包住

Math.floor(-900000 / 1000 / 60) = 15

再將轉換的數字作組合就是我們最後要得到的時間

resultTime hours ":" minutes
08:15 08 ":" 15

 

後記

後來又看到其他大神的寫法不用像我這樣寫的落落長

var time = "08:30";
_startTime = time.split(":");
var startDate = new Date(0, 0, 0, _startTime[0], _startTime[1], 0);
startDate.setMinutes(startDate.getMinutes() - 15);
resultTime = startDate.getHours() + ":" + startDate.getMinutes();

 

arrow
arrow
    文章標籤
    javascript 2個時間相減
    全站熱搜

    小小工程師林可可 發表在 痞客邦 留言(0) 人氣()