使用PowerShell的日期之间的差异

NUL*_*ULL 6 powershell

我正在学习Windows PowerShell,我想在两个日期之间得到几个月的差异:

For example: end: 2014-06-01
now: 2014-01-10
answer: 6 months

$now = get-date
    $date = $end -as [DateTime];
    if (!$date)
    {
      'You entered an invalid date'
    }
    else
    {
      $nts = ($now - $end).Months
      write-output $nts
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,但我无法在PowerShell中获得正确的月份.我该如何解决?

Tre*_*van 19

$endFromDatabase变量来自哪里?你的帖子中不清楚那部分内容.

要演示减去DateTime对象,请参阅下面的示例.

$TimeSpan = [DateTime]'2014-01-10' - [DateTime]'2014-01-06';
Run Code Online (Sandbox Code Playgroud)

您将从操作中收到一个System.TimeSpan结果,因此您可以探索以下成员:

$TimeSpan.TotalDays;
Run Code Online (Sandbox Code Playgroud)

我的猜测是你只需要修改$endFromDatabase变量中的值,这样就可以将它转换为System.DateTime对象.

背景

[DateTime]从另一个[DateTime]对象中减去一个对象是有效的,因为[DateTime]该类会重载减法运算符,从而产生op_subtraction中间语言(IL)方法.您可以在.NET对象资源管理器工具(例如.NET Reflector)中对此进行检查.

您会注意到减法运算符的第二个重载,它允许您[TimeSpan][DateTime]对象中减去一个对象.

.NET Reflector截图


mjo*_*nor 10

像这样的东西?

$begin = [datetime]'02/10/2011'
$end   = [datetime]'01/10/2013'

$monthdiff = $end.month - $begin.month + (($end.Year - $begin.year) * 12)
$monthdiff

23
Run Code Online (Sandbox Code Playgroud)