2011-02-02 58 views
0

我在當前網站中使用此腳本。我能夠使它在Ruby on Rails 3中工作,但我想知道是否可以用Ruby重寫它。如果是這樣,我可以在哪裏找到關於它的信息?將JavaScript轉換爲來自JavaScript的Ruby on Rails

function init () 
{ 
    timeDisplay = document.createTextNode (""); 
    document.getElementById("clock").appendChild (timeDisplay); 
} 

function updateClock () 
{ 
    var currentTime = new Date (); 

    var currentDay = currentTime.getDay (); 

    //Convert the day component to day abbreviation 
    currentDay = (currentDay == 0) ? "Sun" : currentDay; 
    currentDay = (currentDay == 1) ? "Mon" : currentDay; 
    currentDay = (currentDay == 2) ? "Tue" : currentDay; 
    currentDay = (currentDay == 3) ? "Wed" : currentDay; 
    currentDay = (currentDay == 4) ? "Thu" : currentDay; 
    currentDay = (currentDay == 5) ? "Fri" : currentDay; 
    currentDay = (currentDay == 6) ? "Sat" : currentDay; 

    var currentMonth = currentTime.getMonth(); 

    //Convert the month component to text month 
    currentMonth = (currentMonth == 0) ? "January" : currentMonth; 
    currentMonth = (currentMonth == 1) ? "February" : currentMonth; 
    currentMonth = (currentMonth == 2) ? "March" : currentMonth; 
    currentMonth = (currentMonth == 3) ? "April" : currentMonth; 
    currentMonth = (currentMonth == 4) ? "May" : currentMonth; 
    currentMonth = (currentMonth == 5) ? "June" : currentMonth; 
    currentMonth = (currentMonth == 6) ? "July" : currentMonth; 
    currentMonth = (currentMonth == 7) ? "August" : currentMonth; 
    currentMonth = (currentMonth == 8) ? "September" : currentMonth; 
    currentMonth = (currentMonth == 9) ? "October" : currentMonth; 
    currentMonth = (currentMonth == 10) ? "November" : currentMonth; 
    currentMonth = (currentMonth == 11) ? "December" : currentMonth; 

    var currentDate = currentTime.getDate(); 

    // Add suffix to the date 
    currentDate = (currentDate == 1 || currentDate == 21 || currentDate == 31) ? currentDate + "st" : currentDate; 
    currentDate = (currentDate == 2 || currentDate == 22) ? currentDate + "nd" : currentDate; 
    currentDate = (currentDate == 3) || currentDate == 23 ? currentDate + "rd" : currentDate; 
    currentDate = (currentDate > 3 || currentDate < 21 || currentDate > 23 || currentDate < 31) ? currentDate + "th" : currentDate; 


    var currentHours = currentTime.getHours (); 
    var currentMinutes = currentTime.getMinutes (); 

    // Pad the minutes and seconds with leading zeros, if required 
    currentMinutes = (currentMinutes < 10 ? "0" : "") + currentMinutes; 

    // Choose either "AM" or "PM" as appropriate 
    var timeOfDay = (currentHours < 12) ? "AM" : "PM"; 

    // Convert the hours component to 12-hour format if needed 
    currentHours = (currentHours > 12) ? currentHours - 12 : currentHours; 

    // Convert an hours component of "0" to "12" 
    currentHours = (currentHours == 0) ? 12 : currentHours; 

    // Compose the string for display 
    var currentTimeString = "Today is : " + currentDay + " " + currentMonth + " " + currentDate + " " + currentHours + ":" + currentMinutes + " " + timeOfDay; 

    // Update the time display 
    document.getElementById("clock").firstChild.nodeValue = currentTimeString; 
} 

回答

3

我建議看看Ruby的Time類。具體來說就是Time.now()函數。

http://www.ruby-doc.org/core/classes/Time.html

再看看time.strftime()來確定如何對其進行格式化一樣在上面的代碼。

例子:

t = Time.now 
puts t.strftime("%d/%m/%Y %H:%M:%S") 
+1

當心Time.now使用服務器本地時間。如果您打算向不同時區的用戶顯示頁面,則需要閱讀utc_offset。 – 2011-02-02 00:52:33

+0

這可能會工作我的問題是現在將該時鐘自動更新或不? – 2011-02-02 01:26:47

0

當然,你可以做到這一點,但要注意的是,史蒂夫·威廉指出的那樣,你將被使用服務器的時間,但最重要的是你將使得服務器做的工作是很重要的客戶可以而且應該這樣做。將盡可能多的簡單處理卸載到客戶端以獲得最高效的服務器非常重要。它可能看起來很不重要,但是如果你在每個頁面上有幾件小事情,他們可能會遇到一件重要的事情,特別是當你的服務器開始大量使用時。

這就像人們徒步阿巴拉契亞小徑切斷牙刷柄一樣。它只有一兩盎司,但是如果你把這個盎司加到所有其他盎司中,那麼它們就會削減其他的東西,它可以增加到磅。