使用PowerShell的日期之间的差异

使用PowerShell的日期之间的差异,powershell,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

我正在学习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
    }

我什么都试过了,但我在PowerShell中找不到正确的月份。如何修复它?

变量
$endFromDatabase
来自哪里?那部分在你的帖子里不清楚

要演示如何减去
DateTime
对象,请参见下面的示例

$TimeSpan = [DateTime]'2014-01-10' - [DateTime]'2014-01-06';
操作的结果是,您将收到一个
System.TimeSpan
,因此您可以浏览以下成员:

$TimeSpan.TotalDays;
我猜您只需要修复
$endFromDatabase
变量中的值,这样就可以将它转换为
System.DateTime
对象

背景 从另一个
[DateTime]
对象中减去
[DateTime]
对象是有效的,因为
[DateTime]
类重载了减法运算符,这导致了
操作减法
中间语言(IL)方法。您可以在.NET对象资源管理器工具(如.NET Reflector)中对此进行检查

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

像这样的事

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

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

23

这是我能找到的最接近你的原始代码。在timespan中减去datetime的结果,timespan有days成员,但没有months成员<代码>($date-$now).gettype()


只返回一个[timespan]并不能真正回答这个问题,因为如果没有日历日期引用,它不会转化为月差。4月1日-30天是2个月前。5月1日是最后一个月。
$end = '2014-06-01'
$now = get-date
$date = $end -as [DateTime];
if (!$date) 
{
  'You entered an invalid date'
}
else 
{
  $nts = ($date - $now).days/30
  write-output $nts
}