Intersystems Cache中两个日期时间戳之间的区别

问题描述:

我想知道两个日期时间戳之间的小时数和分钟数。Intersystems Cache中两个日期时间戳之间的区别

例如如果

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) 

谢谢你的帮助。

另一种选择:

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 
+0

adaptun感谢这个 – jk1844

+0

是有办法,我可以出把25.5为25:30格式呢?非常感谢 – jk1844

+1

写$ zt(25.5 * 60)'00:25:30' – DAiMor

感谢所有的帮助嗨。 我设法想出下面的内容,如果有人能改善这一点,很感激。

<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 

+0

为什么当你需要以小时为单位找到差异时,你在几秒钟内就会获得差异。 DATEDIFF [支持](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_datediff)小时。 – DAiMor

+0

是的,谢谢。我可以在几小时内得到这个差异。 – jk1844