我正在学习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中获得正确的月份。我该如何解决?
像这样的东西?
$begin = [datetime]'02/10/2011'
$end = [datetime]'01/10/2013'
$monthdiff = $end.month - $begin.month + (($end.Year - $begin.year) * 12)
$monthdiff
23
$endFromDatabase
变量来自哪里?你的帖子中不清楚那部分内容。
要演示减去DateTime
对象,请参阅下面的示例。
$TimeSpan = [DateTime]'2014-01-10' - [DateTime]'2014-01-06';
您将从操作中收到System.TimeSpan
,因此您可以探索以下成员:
$TimeSpan.TotalDays;
我的猜测是你只需要修改$endFromDatabase
变量中的值,这样就可以将它转换为System.DateTime
对象。
从另一个[DateTime]
对象中减去[DateTime]
对象是有效的,因为[DateTime]
类重载了减法运算符,从而产生了op_subtraction
中间语言(IL)方法。您可以在.NET对象资源管理器工具(例如.NET Reflector)中对此进行检查。
您会注意到减法运算符的第二个重载,它允许您从[TimeSpan]
对象中减去[DateTime]
对象。
这跟我原来的代码一样近。在一个时间跨度中减去datetime的结果,该时间跨度具有days成员,但不是月成员。 ($date - $now).gettype()
$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
}