#PSTip Handling negative TimeSpan objects
Let’s say you created a new TimeSpan object by using the Start parameter.
PS> $ts = New-TimeSpan -Start 1/1/2014
PS> $ts
Days : -324
Hours : -9
Minutes : -44
Seconds : -12
Milliseconds : -596
Ticks : -280286525960331
TotalDays : -324.405701342976
TotalHours : -7785.73683223142
TotalMinutes : -467144.209933885
TotalSeconds : -28028652.5960331
TotalMilliseconds : -28028652596.0331
You ended up with an object whose value is negative because the start date is greater than the end date. PowerShell assigns the current date to the End parameter if no value has been specified. So, what do you do if you need a positive value? If you send the object to the Get-Member cmdlet you’ll notice a method called Negate.
PS> $ts | Get-Member -MemberType Method
TypeName: System.TimeSpan
Name MemberType Definition
---- ---------- ----------
Add Method timespan Add(timespan ts)
CompareTo Method int CompareTo(System.Object value), int CompareTo(timespan value), int IComparable.CompareTo(...
Duration Method timespan Duration()
Equals Method bool Equals(System.Object value), bool Equals(timespan obj), bool IEquatable[timespan].Equals...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
Negate Method timespan Negate()
Subtract Method timespan Subtract(timespan ts)
ToString Method string ToString(), string ToString(string format), string ToString(string format, System.IFor...
All you need to do is invoke it.
PS> $ts.Negate()
Days : 324
Hours : 9
Minutes : 44
Seconds : 12
Milliseconds : 596
Ticks : 280286525960331
TotalDays : 324.405701342976
TotalHours : 7785.73683223142
TotalMinutes : 467144.209933885
TotalSeconds : 28028652.5960331
TotalMilliseconds : 28028652596.0331
Likewise, invoking the method on a positive object gives you back a negative instance.
Share on: