2017-02-27 302 views
1

私は雇用主の社内Webの存在に取り組んでおり、保存したい古いVBScriptがあります。それはIEで表示されますが、他のブラウザではうまくいきません。なぜなら、私が理解しているVBScriptは廃止されているからです。このスクリプトは現在の日付をとり、消防署の日のカレンダーにある「単位」の日を計算します。今日(2月26日)は、例えば「1ユニット」または「グリーンユニット」であり、次のラインは2ユニット/ブルーユニット、次に3ユニット/レッドユニットである。うるう年の場合、余分な日は「0単位」または「ホワイト単位」とみなされます。だからここ古いVBScriptからJavaScriptへの変換

は古いVBScriptのです:

// 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; 

現在の日付のために、それは私の結果を与える:

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のです3.9499762037034998(私の最後のリフレッシュに基づいて)しかし、それは私にユニットの日は3ではないことを伝えているはずです。3ユニットは2日後です。私は単純な何かが欠落しているか、または私が作業しているVBScriptに欠陥がある(または、おそらく私はそれを正しく解釈していない)ように感じる。

誰かが私を方向に向けることができますか?私の雇用主は、すべての内部コンピュータにIEを必要としていますが、個人的には、他のブラウザでも動作させたいと思います。

答えて

1

あなたの再書き込みに考慮すべきいくつかの要因があります:

  • sdは、2008年3月10日または2008年10月3日であるかどうかは明らかではありません - どのような場合には、それは彼らは両方の答えを与えると思われます幸運の偶然かもしれない1の!

  • VBScriptがIf Month(Date) > 2 Thenを言いますが、(d.getMonth() > 1)場合、あなたのjavascriptのはとてもそれが補正に

  • を必要とするVBScriptはこのラインiLeapYears = Int((Year(Date)-2008)/4)ていると言う - あなたは、このセクションでのVBScript intの同等としてMath.floorを使用する必要がありますが:iLeapYears = (d.getFullYear() - 2008)/4;

  • date.jsのような現代の図書館を使って、日付の操作や書式設定などの重い作業を取り除きます。

  • これまでに白いチームで働いたことがありますか? iUnit = (iElapsed Mod 3) + 1は+ ve iElapsedのために決して0になることはありません。 VBScriptは0または1ベースの配列を持つことができますが、Option Base 1が存在しないので、aUnitCOlor = Array("white","green","blue","red")の場合はaUnitCOlor(0)が白であると仮定する必要があります。

私のタイムゾーンがGMT + 11であるため、27/2/17は緑色の日です。あなたは何タイムゾーンですか?

// 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に関する質問をして、誰かが答えた後1ヶ月間それを放棄すると、私が作りたかった最初の印象ではありませんでした。私はプロジェクトの別の部分で横行してしまったので、しばらくの間それを棚上げした後でこれを再訪しています。私にいくつかの助けを提供する時間を取ってくれてありがとう。私はGMT-4です。今日は1日またはグリーンユニットの日にする必要がありますが、2/Blueとして登録します。私の上司によれば、うるう年があるたびにこれを調整する必要があります。 – joshuaw

+0

私は比較のために間違った日付を使用している可能性が非常に高いです。以前のデザイナーは数千種類のスパゲッティコードのページにまたがるVBScriptのいくつかのバージョンを持っていました。なぜならこれは新しいサイトを最初から始めたからです。私はJavaScriptを初めて使っても問題は解決しません。 – joshuaw

関連する問題