Как я могу использовать переменную, содержащую дату, чтобы действовать как функция get-date в PowerShell? У меня есть переменная $ date, содержащая 2016-09-08. Я хочу вычесть один день из даты $. что-то типа:

$date = "2016-09-08"
$date.AddDays(-1)

Не работает.

2
Joey 8 Сен 2016 в 04:42

5 ответов

Лучший ответ

«2016-09-08» - это строка. Вам нужно преобразовать его в объект datetime. Есть несколько способов сделать это, но ниже приведен пример передачи строки в командлет Get-Date.

$date = Get-Date "2016-09-08"
$date.AddDays(-1).ToString("yyyy-MM-dd")

См. Строки настраиваемого формата даты и времени для подробнее обо всех доступных вариантах.

7
StephenP 8 Сен 2016 в 02:06

Эта ветка мне очень помогла, и вот что я пытался сделать. Совместное использование, чтобы другие могли видеть больше вещей, которые вы можете сделать с помощью Get-Date и AddDays.

PS C:\Users\zzz> (Get-Date $date).AddDays(0).ToString("MMddyyyy")
07162019

PS C:\Users\zzz> (Get-Date $date).AddDays(-1).ToString("MMddyyyy")
07152019
2
LReeder14 16 Июл 2019 в 18:30

Преобразование и вычитание одной строки.

(Get-Date $date).AddDays(-1)
4
Mani Live 14 Сен 2018 в 16:52

Ваша переменная - String. запустите $date.gettype(), он выведет строку.

$date = "2016-09-08"
$date.gettype()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Чтобы иметь возможность использовать функции datetime, вам нужна переменная datetime.

$date = get-date("2016-09-08")
$date.gettype()
  IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Datetime                                   System.Object
$date.adddays(-1)
Wednesday, September 7, 2016 12:00:00 AM

Тогда вы можете начать использовать форматирование по вашему выбору.

0
Farhad Farahi 8 Сен 2016 в 02:08

Расширение ответа Mani Live ... для использования в обычном командном файле:

for /F "usebackq" %%d in (`powershell -STA -ExecutionPolicy ByPass -command "echo ((Get-Date).AddDays(-10)).ToString(\"yyyy-MM-dd\")"`) do set ten_days_ago=%%d
1
Tom Warfield 28 Июн 2019 в 13:50