2010-12-22 58 views
1

我在我的WSH-JScripts中使用Date.prototype來做一些日期計算。我想將這些功能也包含在WSH-VBS中。基本上,混合JS和VBS代碼,並將JS文件包含在VBS腳本中可以在WSF文件中使用。WSH:如何在VBS中使用擴展的JScript Date對象?

但我無法獲得擴展的Date對象在VBS中工作。我想這是因爲在VBS中沒有對等的Date對象,並且在VBS中以另一種方式處理日期。

在VBS中重新實現我的日期函數似乎是一個壞主意(只要我不確定沒有其他方法)。可以在VBS腳本中編寫簡單的JS包裝器,這種腳本可以轉發到Date對象函數。

如果還有其他想法,我會很高興看到它。

回答

1

以下腳本適用於Windows 7的腳本。我認爲關鍵是有一對函數可以在JScript Date對象和VBScript Date類型之間進行轉換。在我的例子中,JSDateFromVB是一個非常簡單的函數,它從VBScript Date轉換爲JScript Date

<job id="test"> 
    <script language="JScript"> 
     if (typeof Date.prototype.prettyPrint === 'undefined') 
     { 
      Date.prototype.prettyPrint = function() { 
       return this.getFullYear() + '-' + 
        (this.getMonth()+1) + '-' + 
        this.getDate(); 
      } 
     } 

     function makeDate(vbDate) { 
      return new Date(vbDate); 
     } 
    </script> 
    <script language="VBScript"> 
     Dim d 
     d = DateSerial(2000, 11, 30) 

     Dim js_d 
     Set js_d = JSDateFromVB(d) 

     WScript.Echo js_d.prettyPrint() 

     Function JSDateFromVB(pDate) 
      Set JSDateFromVB = makeDate(pDate) 
     End Function 
    </script> 
</job> 
+0

這看起來不錯。我的想法是有一個簡單的JS函數轉發到Date對象函數。您的解決方案只是使VBS中的(擴展的)JS Date對象可用。訪問像getFullYear()這樣的內置日期函數也可以。比我的想法少得多的工作。非常感謝你! – nokul 2010-12-23 09:34:55

0

您在JavaScript中對Date對象的擴展無法在VBScript中工作的原因是WSH系統沒有注意到任何JavaScript對象原型的擴展。原型定義只存在於您編寫的JavaScript代碼中 - 只要您嘗試從VBScript中訪問它,它就不存在,因爲它從未導入該名稱空間。然而,你可以通過在一個普通的JavaScript函數(這是獲得導入的兩個項目之一 - 我相信另一個是全局變量)中定義原型擴展來破解它。原型擴展只會在JavaScript Date對象上存在 - 但是不能擴展VBScript對象。

function blargh() { 
    Date.prototype.help = function() {...}; 
    ... 
} 

...然後在您的VBScript,則稱之爲「blargh()」將要修改JavaScript中的Date對象,以便任何Date對象返回VBScript的將有「幫助()」子功能可用。

相關問題