2012-08-03 47 views
2

我一直在使用Microsoft XSLT(1.0)中的扩展进行实验。在JavaScript函数中,我只是试图返回当前的ISO日期和时间。听起来很简单。XSLT JavaScript扩展无法调用Date()。toISOString()

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          xmlns:ms="urn:schemas-microsoft-com:xslt" 
          xmlns:util="urn:Utility" extension-element-prefixes="ms" 
          > 
    <xsl:output method="html" version="1.0"/> 
    <ms:script language="javascript" implements-prefix="util"> 
    function today() 
    { 
     var d = new Date(); 
     return d.toISOString(); 
    } 
    </ms:script> 
    <!-- =============================================================== --> 
    <xsl:template match="Person"> 
     <xsl:value-of select="util:today()"/> 
    </xsl:template> 
    </xsl:stylesheet> 

当您执行上述操作时,它返回“功能预期”。根据微软公司的文档toISOString假设为JavaScript Date()对象。如果我使用toGMTString()它会返回GMT值。我真的需要以ISO格式返回的当前日期。

任何想法?

+0

['.toISOString'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString)不支持的<= IE8 – Esailija 2012-08-03 14:27:37

回答

1

toISOString()不是the original jScript Date object的财产。

它支持IE9 +,甚至在standards rendering mode only

试试这个。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ms="urn:schemas-microsoft-com:xslt" 
    xmlns:util="urn:Utility" 
    extension-element-prefixes="ms" 
> 
    <xsl:output method="html" version="4.0" /> 

    <ms:script language="jscript" implements-prefix="util"> 
    <![CDATA[ 
    function isoDate() { 
    var d = new Date(); 
    return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) 
      + 'T' 
      + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) 
      + '.000Z'; 
    } 

    function pad(num) { 
    return (num < 10) ? '0' + num : '' + num; 
    } 
    ]]> 
    </ms:script> 

    <xsl:template match="/"> 
    <xsl:value-of select="util:isoDate()"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

我将连接到http:/ /msdn.microsoft.com/en-us/library/yek4tbz0%28v=vs.84%29作为IE <= 8中使用的JScript脚本引擎的文档,并由MSXML在“ms:script”部分中使用。链接http://msdn.microsoft.com/en-us/library/xby9ffhf.aspx指向JScript.NET版本的JScript,即.NET框架中的ECMAScript实现。 – 2012-08-03 17:31:31

+0

@Martin绝对。我的不好,链接固定在答案。 – Tomalak 2012-08-03 17:34:34

+0

感谢您的回复。我已经编写了一些与你的例子非常相似的东西。这似乎是这个标准将成为Date对象的一部分。 – 2012-08-06 13:29:35