2

我一直在尝试在Microsoft XSLT (1.0) 中使用扩展。在 JavaScript 函数中,我只是想返回当前的 ISO 日期和时间。听起来很容易。

    <?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>

当您执行上述操作时,它会返回“预期功能”。根据 Microsoft 文档toISOString,应该是 JavaScriptDate()对象。如果我使用toGMTString()它会返回 GMT 值。我真的需要以 ISO 格式返回的当前日期。

有任何想法吗?

4

1 回答 1

1

toISOString()不是原始 jScript Date 对象的属性。

它在 IE9+ 中受支持,甚至仅在标准渲染模式下也受支持。

试试这个。

<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>
于 2012-08-03T14:41:55.947 回答