【问题标题】:WSH: How to use extended JScript Date Object in VBS?WSH:如何在 VBS 中使用扩展的 JScript 日期对象?
【发布时间】:2011-05-29 09:03:33
【问题描述】:

我在我的 WSH-JScripts 中使用了Date.prototype 来进行一些日期计算。我也想在 WSH-VBS 中包含这些功能。基本上,混合 JS 和 VBS 代码并在 VBS 脚本中包含 JS 文件在 WSF 文件中工作。

但我无法让扩展的Date 对象在 VBS 中工作。我想这是因为 VBS 中没有等效的 Date 对象,而日期在 VBS 中以另一种方式处理。

在 VBS 中重新实现我的日期函数似乎是个坏主意(只要我不确定是否有其他方法)。可以在 VBS 脚本中编写简单的 JS 包装器,这有点像 Date 对象函数。

如果有其他想法,我会很高兴看到它。

【问题讨论】:

    标签: date vbscript wsh jscript


    【解决方案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>
    

    【讨论】:

    • 这看起来不错。我的想法是有一个简单的 JS 函数转发到 Date 对象函数。您的解决方案只是使(扩展的)JS Date 对象在 VBS 中可用。访问 getFullYear() 等内置日期函数也可以。工作量比我的想法少得多。非常感谢!
    【解决方案2】:

    您在 JavaScript 中对 Date 对象的扩展在 VBScript 中不起作用的原因是 WSH 系统没有注意到对任何 JavaScript 对象原型的扩展。原型定义只存在于您编写的 JavaScript 代码中 - 只要您尝试从 VBScript 中访问它,它就不存在,因为它从未导入到该命名空间中。

    但是,您可以破解它 - 通过在普通 JavaScript 函数中定义原型扩展(这是导入的两个项目之一 - 我相信另一个是全局变量)。然而,原型扩展只存在于 JavaScript Date 对象上 - 您不能扩展 VBScript 对象。

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

    ...然后在您的 VBScript 中,您将调用“blargh()”,它会修改 JavaScript 中的 Date 对象,以便任何返回到 VBScript 的 Date 对象都可以使用“help()”子函数。

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2010-10-06
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多