Convert dateTime to unix epoch in xslt

前端 未结 3 859
余生分开走
余生分开走 2020-12-31 10:37

I have a dateTime variable, and I want to convert it to a decimal value of epoch. How can this be done?

I tried using:

seconds-from-duration($time, x         


        
相关标签:
3条回答
  • 2020-12-31 10:54

    A pure xsl 1.0 lib example:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:date="https://github.com/ilyakharlamov/pure-xsl/date"
        version="1.0">
        <xsl:import href="https://raw.github.com/ilyakharlamov/pure-xsl/master/date.xsl"/>
        <xsl:template match="/">
            <xsl:variable name="time_as_timestamp" select="1365599995640"/>
            <xsl:text>time_as_timestamp:</xsl:text><xsl:value-of select="$time_as_timestamp"/><xsl:text>&#x0A;</xsl:text>
            <xsl:variable name="time_as_xsdatetime">
                <xsl:call-template name="date:date-time">
                    <xsl:with-param name="timestamp" select="$time_as_timestamp"/>
                </xsl:call-template>
            </xsl:variable>
            <xsl:text>time_as_xsdatetime:</xsl:text><xsl:value-of select="$time_as_xsdatetime"/><xsl:text>&#x0A;</xsl:text>
            <xsl:text>converted back:</xsl:text>
            <xsl:call-template name="date:timestamp">
                <xsl:with-param name="date-time" select="$time_as_xsdatetime"/>
            </xsl:call-template>
        </xsl:template>
    </xsl:stylesheet>
    

    Output:

    time_as_timestamp:1365599995640
    time_as_xsdatetime:2013-04-10T13:19:55.640Z
    converted back:1365599995640

    0 讨论(0)
  • 2020-12-31 10:56

    This transformation:

    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xsl:output method="text"/>
    
     <xsl:template match="/">
       <xsl:sequence select="current-dateTime()"/>
    
       <xsl:sequence select=
       "( current-dateTime() - xs:dateTime('1970-01-01T00:00:00') )
        div
         xs:dayTimeDuration('PT1S')
         "/>
     </xsl:template>
    </xsl:stylesheet>
    

    when applied on any XML document (not used), produces the wanted result -- the current date-time and its Unix epoch (the number of seconds since 1/1/1970 ):

    2010-08-12T06:26:54.273-07:00    1281594414.273
    
    0 讨论(0)
  • 2020-12-31 11:08

    As an xpath which does not use division but extracts from the duration:

    for $i in (current-dateTime()-xs:dateTime('1970-01-01T00:00:00Z')) 
        return ((days-from-duration($i)*86400)+(hours-from-duration($i)*3600)+(minutes-from-duration($i)*60)+(seconds-from-duration($i)))
    
    0 讨论(0)
提交回复
热议问题