2

我正在尝试在 XSLT 文件中按日期/时间降序排序,并且我已经能够在大多数情况下完成此操作,但是,时间部分有点棘手。我按“数字”而不是实际的“时间”排序。例如,我的输出是:

2013 年 3 月 2 日上午 10:05

2013 年 3 月 2 日下午 4:28

2013 年 2 月 28 日下午 5:03

通常情况下,降序意味着 10 会在该日期出现在 4 之前,但当涉及到时间时,情况并非如此。关于我如何实现的任何建议:

2013 年 3 月 2 日下午 4:28

2013 年 3 月 2 日上午 10:05

2013 年 2 月 28 日下午 5:03

这是我使用的那种:

<xsl:sort select="substring-before(substring-after(substring-after(NoteEnteredOn, '/'), '/'), ' ')" /> <!-- year  -->
<xsl:sort select="substring(normalize-space(NoteEnteredOn),1,2)"/> <!-- month -->
<xsl:sort select ="substring-after(substring-after(normalize-space(NoteEnteredOn), ' '),' ')"/> <!-- AM / PM-->
<xsl:sort select="substring-before(substring-after(substring-after(NoteEnteredOn, ' '),' '),':')" /> <!--Hour-->
<xsl:sort select="substring-before(substring-after(normalize-space(NoteEnteredOn), ':'), ' ')"/> <!--Minute-->
<xsl:sort select="substring-before(substring-after(NoteEnteredOn, '/'), '/')" /> <!-- Day   -->
4

1 回答 1

2

您需要使用data-type="number"数字部分,sorts按正确的顺序排列,然后使用order="descending"

<!-- year  -->
<xsl:sort select="substring-before(substring-after(substring-after(NoteEnteredOn,
        '/'), '/'), ' ')" order="descending" data-type="number" /> 
<!-- month -->
<xsl:sort select="substring(normalize-space(NoteEnteredOn),1,2)"
        order="descending" data-type="number" /> 
<!-- Day   -->
<xsl:sort select="substring-before(substring-after(NoteEnteredOn, '/'), '/')" 
        order="descending" data-type="number" /> 
<!-- AM / PM-->
<xsl:sort select ="substring-after(substring-after(normalize-space(NoteEnteredOn), 
        ' '),' ')" order="descending" /> 
<!--Hour-->
<xsl:sort select="substring-before(substring-after(normalize-space(NoteEnteredOn), 
                   ,' '),':') mod 12" 
          order="descending" data-type="number" /> 
<!--Minute-->
<xsl:sort select="substring-before(substring-after(normalize-space(NoteEnteredOn),
                   ':'), ' ')" 
          order="descending" data-type="number" /> 

当然,如果您的数据是可排序的yyyy-MM-ddTHH:mm:ss格式,这会容易得多:)

于 2013-03-12T13:45:47.123 回答