2017-02-14 38 views
0

我在StackOverflow上有another question這段代碼。有人能向我解釋這裏發生了什麼,以及它是如何在上午12點到下午11點30分之間產生時間的,以及如果我只需要從上午9點到下午5點30分才能做到的話。你不必給我完整的代碼,至少如果你們能夠幫助我理解這裏發生的事情,一步一步,我就能夠從那裏繼續前進。我對JS很新,仍然在學習。如何在JavaScript中的兩次之間生成時間戳?

var times = [] 
    , periods = ['AM', 'PM'] 
    , hours = [9, 10, 11, 12, 1, 2, 3, 4, 5] 
    , prop = null 
    , hour = null 
    , min = null; 

for (prop in periods) { 
    for (hour in hours) { 
    for (min = 0; min < 60; min += 5) { 
     times.push(('0' + hours[hour]).slice(-2) + ':' + ('0' + min).slice(-2) + " " + periods[prop]); 
    } 
    } 
} 
+0

在結束這個問題之前,如果@DeA能夠清楚地問他想要什麼(我們不想真的想去找另一個問題)。 – ValLeNain

+1

僅僅因爲我沒有在這裏發佈代碼,並不意味着我沒有嘗試過。如果您需要可能有助於提高相關性的代碼段,請詢問。 – DeA

+0

好吧,我將刪除對該問題的所有引用,並以不同的方式對其進行構圖 – DeA

回答

2

也許你被迷惑的主要的事情是什麼,這是這樣做的:

('0' + hours[hour]).slice(-2) 

這是採取了一些(如9),把它變成一個0預謀字符串(「09」 ),然後取最後兩個字符。效果是將數字填充爲兩位數字。

其餘的只是嵌套循環來循環幾分鐘,幾小時和AM/PM。

+0

但是,對於我的要求,這是產生9至5之間的時間,這是否仍然有效?我應該努力做什麼部分或什麼邏輯來實現這個目標? – DeA

+0

我不明白爲什麼不。你爲什麼不跑它看看會發生什麼? –

2

他正在做的是在times中添加一些表示時間的字符串(實際上9AM到5PM之間每5分鐘一個字符串 - 我想你已經略微修改了原始示例)。
字符串格式是HH:MM'AM'/'PM'。

如果你只是想去下午5:30,你會做

var times = [] 
    , hours = [9, 10, 11, 12, 1, 2, 3, 4, 5] 
    , prop = null 
    , hour = null 
    , min = null 
    , frequencyInMin = 30; 

    for (hour in hours) { 
    /* We want to stop at 5.30PM, so the exclusive bound changes when 5 is reached */ 
    var maxMinute = (hour === 5) ? 35 : 60; 

    /* In our case, we know the hours before 12 are 'AM' hours, and the ones after are 'PM' hours */ 
    var amOrPm = (hour >= 9 && hour < 12) ? 'AM' : 'PM'; 

    /* We create a string every <frequencyInMin> minutes, from 9AM, to 5.30PM */ 
    for (min = 0; min < maxMinute; min += frequencyInMin) { 
     times.push(('0' + hours[hour]).slice(-2) + ':' + ('0' + min).slice(-2) + " " + amOrPm); 
    } 
    } 

所以當它涉及到的最後一個循環中,不會00-下午5:30後去。

+0

你是對的,我試圖玩弄它,並正在尋找所有選項,但他實際上在做什麼是貫穿整個陣列,將「AM」附加到它並穿過整個陣列並將「PM」附加到它。但是我打算做的事情,我覺得稍微複雜 – DeA

+0

你想要的字符串格式是什麼?你想每5分鐘或以另一個頻率使用一個字符串嗎? – ValLeNain

+0

與該片段相同的格式現在正在打印,「9:00 AM」以30分鐘的間隔 – DeA

1

一步一步你正在做的以下內容: 變量聲明:

var times = [] 
    , periods = ['AM', 'PM'] 
    , hours = [9, 10, 11, 12, 1, 2, 3, 4, 5] 
    , prop = null 
    , hour = null 
    , min = null; 

對於週期數組列表

for (prop in periods) { 

每個元件對於小時陣列列表中的每個小時

for (hour in hours) { 

對於每分鐘(0到60)中的每分鐘,如5分鐘步驟

for (min = 0; min < 60; min += 5) { 

推它包含一個內置小時

times.push(

設定爲0的字符串加上一個值,以使小時CERO填充的字符串(012 - > 12 & 05 - > 05)

('0' + hours[hour]).slice(-2) + 

小時定界符

':' + 

山姆ë和以前一樣,設置分作爲CERO襯墊(建立爲015將在15和05將切片拉斯2元件一分鐘,以05爲結果)HH之間

('0' + min).slice(-2) + 

空間:毫米和AM/PM指示器

" " + 

經絡指標作爲字符串最後一塊

periods[prop]); 
    } 
    } 
} 

最後,你做這樣的事情:

times = ['09:00 AM', '09:05 AM', '09:10 AM', ... , '05:55 AM', '09:00 PM', '09:05 PM', ... , '05:55 PM'] 

(具有216陣列長度)

如果要生成12 AM之間小時的陣列,以11:30 PM則需要拆分迭代(第一做AM小時這將只有12小時),然後與1,2,3,4,5,6,7,8,9,10和11小時到PM期間相同。

+0

謝謝你的解釋。寫得非常好。如果我只需要9到5之間的一段時間,我是否會將迭代分成12次而不是AM和PM? – DeA

+0

這將被推薦,除非你想要AM/PM小時的每個值在小時列表中 – SerCrAsH

相關問題