2016-02-04 117 views
-1

我需要一些幫助在我的圖表上繪製時間。我有一個網格,在我的html頁面上橫向排列有24個框。每個方框代表一個小時,並在我的電子表格中定義寬度爲28px。第一個盒子從上午12點開始,然後一直到晚上11點(每天24小時)。數學計算預訂期

我現在需要做的就是情節我對電網項目,唯一的問題是我無法弄清楚的數學運用到哪裏工作左側位置應該開始,有多寬是應該的。我的代碼中的左邊位置是基於一個百分比,0%是12AM的開始。寬度基於像素。任何人誰可以告訴我的方式嗎?

所以可以說我有以下的項目,你會在左側位置(%)和寬度(PX)是每個。我需要的只是公式真的,因爲我可以工作了如何編寫代碼,並注入它在我的網格

Name, StartTime, EndTime 
Item 1, 9:55, 14:55 
Item 2, 16:00, 17:45 
Item 2, 18:10, 19:55 
+0

我建議使用JavaScript這樣的事情 – Derek

+1

如果你只是希望公式我認爲這可能是更合適的東西,如「算法」或添加標籤「幾何」? – whrrgarbl

+0

由於將這樣做 – JK36

回答

0

你有n = 24盒,寬度w = 28 PX每個。時間可以用h小時和m分鐘來表示。

本質上,你只是想弄清楚每個盒子的開始和結束,你可以將其轉換爲像素寬度,並將轉換爲爲百分比。

  1. h + m/60會給你分數小時。乘以寬度以獲得時間的像素位置:(h + m/60)*w。 (快速完整性檢查:1:30應該是1半半寬度,即42像素。)

  2. 對於這兩個時間都這樣做,現在您有start_pxend_px。這可以讓你計算一個width = end_px - start_px

  3. 現在你可以轉換成百分比:width_percent = width/total_width * 100 = width/(w * n) * 100

因此,最終的公式應該是這樣的:

start_px = (start_h + start_m/60)*w 
end_px = (end_h + end_m/60)*w 
width_percent = (end_px - start_px)/(w * n) * 100 

編輯:這裏有一個快速和骯髒的Python 2腳本(正是我所掌握的)來運行一些示例。

def find_width(start_h, start_m, end_h, end_m, n, w): 
    start_px = (start_h + start_m/60.)*w 
    end_px = (end_h + end_m/60.)*w 
    width_percent = (end_px - start_px)/(w*n)*100 
    print "%d:%02d-%d:%02d Spans from %dpx to %dpx, or %.2f%%"%(start_h, start_m, end_h, end_m, start_px, end_px, width_percent) 

n = 24 # 24 hours 
w = 10 # width of 10, easier to check math 

# entire day - should be 240 px or 100% 
find_width(0,0, 24,0, n,w) 

# half day - should be 50% 
find_width(0,0, 12,0, n,w) 

# try starting from not-zero 
find_width(4,0, 16,0, n,w) 
find_width(4,30, 5,30, n,w) 

# try non-zero minutes 
find_width(4,30, 16,30, n,w) 

# try less than an hour 
find_width(4,30, 5,00, n,w) 
find_width(4,30, 4,45, n,w) 

此輸出:

0:00-24:00 Spans from 0px to 240px, or 100.00% 
0:00-12:00 Spans from 0px to 120px, or 50.00% 
4:00-16:00 Spans from 40px to 160px, or 50.00% 
4:30-5:30 Spans from 45px to 55px, or 4.17% 
4:30-16:30 Spans from 45px to 165px, or 50.00% 
4:30-5:00 Spans from 45px to 50px, or 2.08% 
4:30-4:45 Spans from 45px to 47px, or 1.04%