DateTime减法在PowerShell中不起作用-赋值与相等运算符
今天(2017-05-29),我在Windows 7 Enterprise上使用PowerShell 5.0.10586.117并运行以下程序(简称): 即使两天之间的差异是39,我的代码也会跳入if子句并向屏幕发送“test” 我做错了什么?您正在将DateTime减法在PowerShell中不起作用-赋值与相等运算符,powershell,syntax,operators,equality-operator,Powershell,Syntax,Operators,Equality Operator,今天(2017-05-29),我在Windows 7 Enterprise上使用PowerShell 5.0.10586.117并运行以下程序(简称): 即使两天之间的差异是39,我的代码也会跳入if子句并向屏幕发送“test” 我做错了什么?您正在将14分配给$TimeDifference。相反,您不希望使用-le来比较天属性: if ($TimeDifference.Days -le 14) { Write-Host "test" } 不是马丁更好的解决方案,只是一个简短的代码 $
14
分配给$TimeDifference
。相反,您不希望使用-le
来比较天
属性:
if ($TimeDifference.Days -le 14)
{
Write-Host "test"
}
不是马丁更好的解决方案,只是一个简短的代码
$dateOfLicense = [DateTime]"2017-04-20"
$TimeDifferenceDays = ((Get-Date) - $dateOfLicense).Days
if ($TimeDifferenceDays -lt 14)
{
Write-Host "test"
}
补充:
与许多其他语言一样,但与VBScript不同,例如,PowerShell使用不同的符号:
- 赋值运算符(
)=
- vs.相等运算符(
)-eq
if ($TimeDifference = 14) ... # same as: if (($TimeDifference) = 14) ...
正如Martin解释的那样,将14
赋值给变量$TimeDifference
,并且,因为赋值是(必要时,作为的条件,如果)包含在(…)
中,返回赋值(内部(…)
around$TimeDifference
在这里没有区别)
因此,由if
计算的(…)
表达式具有值14
-一个非零数-在该布尔上下文中,它被解释为$true
注:
- 要了解有关PowerShell运营商的更多信息,请运行
- 要了解PowerShell如何将条件中的任意值解释为布尔值(对于布尔强制),请参阅的底部部分
- 要测试已经是布尔值的变量或表达式,只需按原样使用它们,或者在必要时,使用
-not
(!
)来否定它们;e、 g:
最后,这里是一个精简版的代码,它不需要中间变量,使用强制转换将字符串转换为一个[datetime]
实例,并使用[datetime]::now
,这是与获取日期
更有效的等价物(尽管这几乎无关紧要)
请注意,“test”
作为语句本身是如何隐式地将输出发送到PowerShell的(成功)输出流的,默认情况下,输出流会打印到控制台。
Write Host
绕过此流并将其删除
if ($TimeDifference = 14) ... # same as: if (($TimeDifference) = 14) ...
if ($someBoolean) { # Better than: if ($someBoolean -eq $true)
if (-not $someBoolean) { # Better than: if ($someBoolean -eq $false)
if (([datetime]::now - [datetime] '2017-04-20').Days -eq 14) {
"test"
}