Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve datetime object in Powershell without the time portion

Is it possible to retrieve only the date portion of a datetime object in PowerShell? Reason being I need to compare the LastWriteTime property of files with today's date to determine whether to backup a file or not. As-is a datetime object includes the time as well which will always evaluate to false when I do something like:

if ($fileDate -eq $currentDate) {
    # Do backup
}

I haven't found anyway to do this. If we use the format operator or a method, it converts the object to a string object. If you try to convert that back to a datetime object, it appends the time back onto the object. Probably something simple, but I've been looking at this script for a while and that's the last part that's breaking.

like image 840
Niag Ntawv Avatar asked Jun 11 '26 00:06

Niag Ntawv


2 Answers

EDIT: As @jessehouwing points out in the comments below, my answers are unnecessarily complicated. Just use $datetime.Date.


A couple of ways to get a DateTime without any time component (ie set to midnight at the start of the date in question, 00:00:00):

$dateTime = <some DateTime>
$dateWithoutTime = $dateTime.AddSeconds(-$dateTime.Second).AddMinutes(-$dateTime.Minute).AddHours(-$dateTime.Hour)

or

$dateTime = <some DateTime>
$dateWithoutTime = Get-Date -Date ($dateTime.ToString("yyyy-MM-dd"))

I ran each version in a loop, iterating 100,000 times. The first version took 16.4 seconds, the second version took 26.5 seconds. So I would go with the first version, although it looks a little more complicated.

Based on answers found here: https://techibee.com/powershell/powershell-how-to-query-date-time-without-seconds/2737 (that article is about stripping just the seconds from a DateTime. But it can be extended to stripping hours, minutes and seconds).

like image 122
Simon Tewsi Avatar answered Jun 13 '26 14:06

Simon Tewsi


Assuming $currentTime contains a DateTime object, you can retrieve a new DateTime object with the same date but with the time portion zeroed like this:

$midnight = Get-Date $currentTime -Hour 0 -Minute 0 -Second 0 -Millisecond 0
like image 37
Johan Myréen Avatar answered Jun 13 '26 14:06

Johan Myréen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!