【问题标题】:XSLT Javascript extension can not call Date().toISOString()XSLT Javascript 扩展不能调用 Date().toISOString()
【发布时间】:2012-08-03 14:23:19
【问题描述】:

我一直在尝试使用 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 应该用于 JavaScript Date() 对象。如果我使用 toGMTString() 它会返回 GMT 值。我真的需要以 ISO 格式返回的当前日期。

有什么想法吗?

【问题讨论】:

标签: javascript xslt xslt-extension


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

【讨论】:

  • 我将链接到 msdn.microsoft.com/en-us/library/yek4tbz0%28v=vs.84%29 作为 IE ms:script 部分中由 MSXML 使用。链接 msdn.microsoft.com/en-us/library/xby9ffhf.aspx 指向 JScript.NET 版本的 JScript,它是 .NET 框架中的 ECMAScript 实现。
  • @Martin 绝对。我的错,链接已在答案中修复。
  • 感谢您的回复。我已经编写了与您的示例非常相似的代码。似乎这个标准将成为 Date 对象的一部分。
  • @Scott 这是标准现在的一部分。它是随 ECMAScript 5 引入的。JScript 比 ECMAScript 5 早了整整几年。
猜你喜欢
  • 2012-05-17
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多