Avatar billede filix Nybegynder
04. maj 2010 - 17:37 Der er 5 kommentarer

Hvordan kan jeg se om en dato er imellem 2 datoer ?

Hej

Hvordan kan jeg se om 1 dato er imellem 2 datoer?

Jeg har et søge resultat der skal formateres, så man kan indtaste 2 datoer også få alle poster imellem.

Men kan man gøre dette i xslt 1,0 ?
Avatar billede arne_v Ekspert
09. maj 2010 - 03:55 #1
Hvis felterne indeholder en xsd:date, så er alfabetisk sammenligning jo identisk med tidsmæssig sammenligning, således at helt normal < kan anvendes.
Avatar billede filix Nybegynder
09. maj 2010 - 10:01 #2
Hejsa Arne

Det er jo kun i Schemas det kan benyttes(som jeg mener det), og her skal jeg benytte det i xsl 1.0.

jeg har en dato stående i xml som ser sådan ud  <Row.Value>08-02-1917</Row.Value>

også har jeg de 2 værdier her
<Server.Request.qstart>06-13-1927</Server.Request.qstart>
  <Server.Request.qend>06-27-1927</Server.Request.qend>

og jeg synes ikke at kunne få normale identifiers til at virke.

Jeg ved ikke om jeg kan kaste værdierne til at virke ?
Avatar billede jokkejensen Novice
12. maj 2010 - 16:22 #3
Det skal gøres gennem en xslt extension, eller også bliver det tricky..

Det kan evt klares inline med C#, men kender ikke dit miljø :

    xmlns:date="ffs"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"

<msxsl:script implements-prefix="date" language="C#">
        public XPathNodeIterator GetNodes(XPathNodeIterator node, string DateStart, string DateEnd)
        {
       
// kode som Arne nemt kan skrive :)
}
    </msxsl:script>

<xsl:variable name="GyldigeNodes" select="msxml:node-set(date:GetNodes($noder, 'xx-xx-xxxx', 'xx-xx-xxxx'))" />


Skal det gøres gennem xslt alene, kræver det at du omskriver datoen..

Ex

<xsl:variable name="gammelXML">
<data>
<node dato="12-12-2001"/>
<node dato="12-08-1998"/>
</data>
</xsl:variable>

<xsl:variable name="nyXML">
<data>
<xsl:foreach select="msxml:node-set($gammelXML)//node">
<xsl:element name="node">
<xsl:attribute name="dato">
<xsl:value-of select="concat(substring-after(substring-after(@dato, '-'), '-'), substring-before(substring-after(@dato, '-'), '-'), substring-before(@dato, '-'))" />
</xsl:attribute>
</xsl:element>
</xsl:foreach>
</data>
</xsl:variable>

Det skulle gerne vende datoen om til noget mere fornuftigt at søge efter ala:

<node dato="20011212" />
<node dato="19980812" />

Det er ikke lige testet, men det er fremgangsmåden.

Jeg foretrækker selv at løse gennem xslt extensions, lader til at performe bedre.

/J
Avatar billede arne_v Ekspert
12. maj 2010 - 17:13 #4
Jeg ville hellere skifte formatet til standard formatet, så er det nemt at sammenligne - og det som viser XML kan så vende formatet til det ønskede UI format.
Avatar billede jokkejensen Novice
12. maj 2010 - 17:17 #5
ja XMLdates er at foretrække i xml. lette at sammenligne med mm.

Ofte er datagrundlaget bare ikke så let at rokke ved, der er sikkert en grund til han ikke blot har ændret.

/J
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester