【问题标题】:Date time difference in batch script批处理脚本中的日期时间差
【发布时间】:2026-02-16 23:00:01
【问题描述】:

我有两个日期时间如下:-

开始时间:- 2017 年 11 月 27 日晚上 11:18:14

结束时间:- 2017 年 11 月 28 日凌晨 4:18:22

如何使用批处理脚本以小时:分钟:秒格式获取它们之间的差异?请帮帮我...

【问题讨论】:

  • @Hille 这不是那个问题的重复...它包括日期和时间
  • 这些日期和时间在哪里?他们是从文件内容中读取的吗?或者它们是从输出中获得的?如果是这样怎么办? (请告诉我们).
  • 它们存储在一个文件中
  • 当我说“如果是这样怎么办?(请告诉我们)。”时,目的是确定您最初如何将这些日期和时间输出到文件中。如果它们被确定为运行脚本或进程的结果,那么最好建议解析和计算文件输出的持续时间,您可以更好地控制格式。后期处理计算仅限于直接使用非特定的本地化文本字符串。

标签: batch-file


【解决方案1】:

试试这个(我称之为datediff.bat):

@if (@X)==(@Y) @end /* JScript comment
    @echo off

    cscript //E:JScript //nologo "%~f0" %*

    exit /b %errorlevel%


@if (@X)==(@Y) @end JScript comment */

//WScript.Echo(WScript.Arguments.Item(0));

var date1=WScript.Arguments.Item(0);
var date2=WScript.Arguments.Item(1);

function fromStringToDate(dateString) {
    var cd=dateString.split(" ")[0];
    var hm=dateString.split(" ")[1];
    var pm=dateString.split(" ")[2].toLowerCase;

    var mon=parseInt(cd.split("/")[0]);
    var day=parseInt(cd.split("/")[1]);
    var yea=parseInt(cd.split("/")[2]);

    var hou=parseInt(hm.split(":")[0]);
    if(pm=="pm"){
        hou=hou+12;
    }
    var min=parseInt(hm.split(":")[1]);
    var sec=parseInt(hm.split(":")[2]);
    //WScript.Echo(hou+" "+mon);
    //WScript.Echo(yea+","+mon+","+day+","+hou+","+min+","+sec);
    date= new Date(yea,mon,day,hou,min,sec,0);
    //WScript.Echo(date);
    return date;
}

var d1=fromStringToDate(date1);
var d2=fromStringToDate(date2);
var timeDiff = Math.abs(d1.getTime() - d2.getTime());

var diffDays = Math.floor(timeDiff / (1000 * 3600 * 24)); 
timeDiff =(timeDiff-diffDays*1000 * 3600 * 24);

var diffHours= Math.floor(timeDiff / (1000 * 3600));
timeDiff =(timeDiff-diffHours*1000 * 3600);

var diffMinutes= Math.floor(timeDiff / (1000 * 60));
timeDiff =(timeDiff-diffMinutes*1000 * 60);

var diffSeconds= Math.floor(timeDiff / (1000));

WScript.Echo("days: " +diffDays);
WScript.Echo("hours: " +diffHours);
WScript.Echo("minutes: " +diffMinutes);
WScript.Echo("seconds: " +diffSeconds);

并像这样测试它:

datediff.bat "11/27/2017 11:18:14 PM" "11/28/2017 4:18:22 AM"

它仅适用于您发布的格式。

【讨论】:

    【解决方案2】:

    在这个打包成批处理的 PowerShell 脚本中,小时数将是总小时数,
    每天相差 24 小时

    :: Q:\Test\2017\11\28\SO_47532900.cmd
    @Echo off
    Set "Start=11/26/2017 11:18:14 PM"
    Set "End=11/28/2017 4:18:22 AM"
    For /F "usebackqdelims=" %%A in (`
    powershell -NoP -C "$TS=New-TimeSpan -Start ([datetime]'%Start%') -End ([datetime]'%End%');'{0}:{1:00}:{2:00}' -f [math]::Floor($TS.TotalHours),$TS.Minutes,$TS.Seconds"
    `) Do Set "DTdiffH=%%A"
    Set DTdiffH
    

    示例输出:

    > SO_47532900.cmd
    DTdiffH=29:00:08
    

    【讨论】: