2017-02-27 48 views
1

我正在處理我的僱主的內部網絡存在,並且存在他們想要保存的舊VBScript。它在IE中顯示,但在任何其他瀏覽器中都不起作用,因爲根據我的理解,VBScript已被棄用。該腳本獲取當前日期並計算消防部門單位日曆上的「單位」日。今天(2月26日)例如是「1單位」或「綠色單位」,下一行是2單位/藍色單位,然後是3單位/紅色單位。如果是閏年,那麼額外的一天被認爲是「0單位」或「白色單位」。將舊的VBScript轉換爲JavaScript

因此,這裏是舊的VBScript:

Sub UpdateClock() 
    Dim iDOW, iElapsed, iLeapYears, iUnit, sDate, sTime, aDOW, aUnitColor, sHTML 

    aUnitCOlor = Array("white", "green", "blue", "red") 
    aDOW = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") 

    iElapsed = DateDiff("d", "3/10/2008", Date) 
    iDOW = WeekDay(Date) 
    iLeapYears = Int((Year(Date)-2008)/4) 
    If Month(Date) > 2 Then iLeapYears = iLeapYears 
    iElapsed = iElapsed + iLeapYears 
    iUnit = (iElapsed Mod 3) + 1 
' sDate = aDOW(iDOW) & " " & FormatDateTime(Date,2) 
    sDate = WeekdayName(DatePart("w", Now())) & " " & FormatDateTime(Date, 2) 

    sTime = FormatDateTime(Time, 3) 

    sHTML = "<font size='1' face='Franklin Gothic Book'>" & sDate & "; " & sTime & "<br>" 
    sHTML = sHTML & "<font size='1' face='Franklin Gothic Book' color='" & aUnitColor(iUnit) & "'>" & CStr(iUnit) & " Unit</font><br>" 

    Clock.innerHTML = sHTML 
End Sub 

setInterval "UpdateClock()", 1000 

,這裏是JavaScript的我已經寫了,試圖重建它:

// This script is intended to calculate the fire department "unit" day 
var d, sd, pd, psd, iElapsed, iLeapYears, iUnit 
// Sets start date 
sd = new Date("March 10, 2008"); 
// Sets current date 
d = new Date(); 

// Calculates the milliseconds between each date and January 1, 1970 
psd = sd.getTime(); 
pd = d.getTime(); 
// Calculates milliseconds between the two dates and divides by the number of milliseconds in a day to determine how many days have passed 
iElapsed = (pd - psd)/86400000; 

// Calculates leap year 
if (d.getMonth() > 1) { 
    iLeapYears = (d.getFullYear() - 2008)/4; 
} else { 
    iLeapYears = 0; 
} 
iElapsed = iElapsed + iLeapYears; 
iUnit = (iElapsed % 3 + 1); 

document.getElementById("DisplayUnitDay").innerHTML = iUnit; 

當前日期它給我的結果3.9499762037034998(根據我上次刷新),但它應該告訴我單位日是1,而不是3. 3單位是從現在開始的兩天。我覺得我要麼缺少一些簡單的東西,要麼我正在從事的VBScript有缺陷(或者我沒有正確解釋它)。

任何人都可以指出我的方向嗎?我的意思是,我的僱主無論如何都要求所有內部計算機都使用IE,但個人而言,我希望它能夠在其他瀏覽器上運行。

回答

1

有幾個因素要考慮到你重新寫:

  • 這是sd尚不清楚是否是2008年3月10日或2008年10月3日 - 在它看來他們都給出一個答案無論如何1這可能是一個幸運的巧合!

  • VBScript的說:If Month(Date) > 2 Then但你的JavaScript表示,如果(d.getMonth() > 1)所以需要修正

  • VBScript的具有此行iLeapYears = Int((Year(Date)-2008)/4) - 你應該使用Math.floor如VBScript int本節相當於:iLeapYears = (d.getFullYear() - 2008)/4;

  • 使用像moment.js這樣的現代化圖書館,擺脫日期操縱和格式化等繁重工作。

  • 它曾經爲白隊工作過嗎?對於+ ve iElapsediUnit = (iElapsed Mod 3) + 1永遠不會爲0。 VBScript可以具有基於0或1的陣列,但不存在Option Base 1,因此必須假設對於aUnitCOlor = Array("white","green","blue","red"),則aUnitCOlor(0)是白色。

所以27/2/17是,也許是因爲我的時區是GMT + 11綠天。你在什麼時區?

// unit colors 
 
var unitColor = ['white', 'green', 'blue', 'red']; 
 

 
// elapsed days 
 
var start = moment(new Date('March 10, 2008')); 
 
var today = moment(new Date); 
 
var elapsed = today.diff(start, 'days'); 
 

 
// update for leap year 
 
if (today.format('M') > 2) { 
 
    elapsed += Math.floor((today.format('Y') - 2008)/4); 
 
} 
 

 
// get unit 
 
unitIndex = (elapsed % 3) + 1; 
 

 
// render 
 
el = document.getElementById('out'); 
 
el.innerHTML = today.format('YYYY-MM-DD') + ' is a day for the ' + unitColor[unitIndex] + ' team';
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 
<div id="out"></div>

+0

請接受我最誠摯的道歉沒有得到回本更快。在Stack Overflow上提出一個問題,然後在有人回答後放棄它一個月,這不是我想要做的第一印象。我在項目的另一部分受到了阻撓,我現在在擱置一段時間後重新審視這個問題。感謝您花時間爲我提供一些幫助。我是GMT-4。今天應該是1或綠色單位的一天,但它註冊爲2 /藍色。根據我的老闆,每次閏年都需要調整。 – joshuaw

+0

我使用錯誤的日期進行比較是非常可能的。以前的設計師有不同版本的VBScript分佈在不同的頁面上,這意味着成千上萬行的意大利麪條代碼,這就是爲什麼我們在新網站上從頭開始的原因。我剛接觸JavaScript並不重要。 – joshuaw