2013-05-07 26 views
1

鑑於「3:00 AM」或「7:00 PM」,有沒有內置功能(如日期)我轉換成毫秒?凌晨3點將是3小時(毫秒),而下午7點是19小時(毫秒)。如何使用javascript將人類可讀的小時數轉換爲毫秒數?

+0

我可能是錯的,但是這是不包括在: http://stackoverflow.com/questions/10944396/how-to-calculate-ms-since-midnight-in-javascript – 2013-05-08 00:34:55

+0

@BrianLangbecker,不完全一樣,因爲當前的問題涉及解析時間字符串。它還會嘗試計算特定時間過去的毫秒數,而不是自午夜以來流逝的當前時間。 – plalx 2013-05-08 02:33:44

回答

1

我不認爲有任何內置的功能,但它不會很複雜,實現你想要的。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

首先,創建一個與0日期經過的毫秒:

var d = new Date(0); 

解析你的時間線,並設置相應的日期時間:

var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/), 
    h = parseInt(t[1], 10), 
    isAm = t[3] === 'AM', 
    isMidnight = h === 12 && isAm, 
    isNoon = h === 12 && !isAm; 

d.setUTCHours(isMidnight? 0 : h + (isAm || isNoon? 0 : 12), parseInt(t[2], 10)); 

使用getTime功能得到毫秒:

console.log(d.getTime()); //10800000 

這裏有一個可重複使用的功能:

function getTimeMilliseconds(timeString) { 
    var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/), 
     h = parseInt(t[1], 10), 
     isAm = t[3] === 'AM', 
     isMidnight = h === 12 && isAm, 
     isNoon = h === 12 && !isAm; 

    return new Date(0).setUTCHours(isMidnight? 0 : h + (isAm || isNoon? 0 : 12), parseInt(t[2], 10)); 
} 

getTimeMilliseconds('3:00 AM'); 

注意,你並不真正需要的Date對象來實現這一點,但我使用它,因爲它爲你的數學,但你總是可以做hours * 3600000 + minutes * 60000

function getTimeMilliseconds(timeString) { 
    var t = timeString.match(/(\d{1,2}):(\d{2}) ([AP]M)/), 
     h = parseInt(t[1], 10), 
     isAm = t[3] === 'AM', 
     isMidnight = h === 12 && isAm, 
     isNoon = h === 12 && !isAm; 

    return (isMidnight? 0 : h + (isAm || isNoon? 0 : 12)) * 3600000 + parseInt(t[2], 10) * 60000; 
} 
+0

不適用於'12:00 PM'(應該是12小時,但將被計爲24.) – 2013-05-08 18:09:34

+0

這裏是一個小提琴演示:http://jsfiddle.net/qs3XZ/ – 2013-05-08 18:16:23

+0

@ColinDeClue,謝謝你反饋,我修正了它。 – plalx 2013-05-08 22:26:11

相關問題