【问题标题】:Difference between two date time stamp in Intersystems Cache系统间缓存中两个日期时间戳之间的差异
【发布时间】:2016-09-21 14:46:31
【问题描述】:

我想知道两个日期时间戳之间的小时数和分钟数。

例如

 sDateTime = 2016-01-01 01:00 
 eDateTime = 2016-01-03 02:30

我希望它输出为 49:30(49 小时 30 分钟) 我无法找到解决此问题的方法。

到目前为止我所拥有的:

    Set oMNOF=##class(MNOF.MNOF).%OpenId(Id)

Set zstartDt=oMNOF.sDateTime 
Set startDt=$PIECE(zstartDt,",",1)          
Set startTime=$PIECE(zstartDt,",",2)    

Set zendDt=oMNOF.eDateTime 
Set endDt=$PIECE(zendDt,",",1)          
Set endTime=$PIECE(zendDt,",",2) 

    set dateDiff=((endDt - startDt))     //2 days 
set timeDiff=(endTime - startTime)    //outputs 5400 seconds

     set d = (dateDiff * 24 * 60 * 60)
set h = ((timeDiff - d) / 60)
set m = timeDiff - (d) - (h * 60)

感谢您的帮助。

【问题讨论】:

    标签: intersystems-cache intersystems intersystems-cache-studio


    【解决方案1】:

    另一种选择:

    USER>set mm=$system.SQL.DATEDIFF("mi","2016-01-02 01:00","2016-01-03 02:30")
    
    USER>write "hours=", mm \ 60
    hours=25
    USER>write "minutes=", mm # 60
    minutes=30
    

    【讨论】:

    • 有没有办法将 25.5 改为 25:30 格式?非常感谢
    • 写 $zt(25.5*60) 00:25:30
    • $zt(99.5*60) 给我 01:39:30 我真的很想显示 99:30 ,有什么建议吗?
    • 类似set time=99.5 write !,$p(time,".")_":"_$e($J("."_$p(time,".",2),0,2)*60_"00",1,2)
    【解决方案2】:

    您好,感谢大家的帮助。 我设法想出了以下内容,如果有人可以对此进行改进,不胜感激。

    <script language="cache" method="MGetData" arguments="pStartDt:%String,pEndDt:%String,pTimeField:%String" returntype="%Library.String">
    set val1="00"
    
    //HOUR: check if length equals 1
    if $LENGTH($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600))=1{
        //add leading zero
        set val1 ="0"_$SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600)
    
    }
    else{
        //get without leading zero
        set val1 = $SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600)
    }
    
    //MINUTES: check if length equals 1
    if $LENGTH($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/60) - ($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600)*60))=1{
    
        //add leading zero
        set val2 ="0"_($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/60) - ($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600)*60))
    
    }
    else{
    
        //get without leading zero
        set val2 = ($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/60) - ($SYSTEM.SQL.FLOOR($system.SQL.DATEDIFF("ss",pStartDt,pEndDt)/3600)*60))
    
    }
    
    //insert result data into the time field
    Write "document.getElementById('"_pTimeField_"').value='"_val1_":"_val2_"';"
    
    //Write "alert('"_val1_"^"_val2_"');"
    
    QUIT 1
    

    【讨论】:

    • 为什么当您需要以小时计算差异时,您会以秒为单位获得差异。 DATEDIFF supports 小时。
    • 好的,谢谢。我本可以在几个小时内得到差异。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2021-10-21
    • 2021-11-25
    • 2011-08-01
    • 2013-08-28
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多