Получите последний день месяца на powershell - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь вставить в файл .txt первый день и последний день месяца, используя PowerShell.

В приведенном ниже примере я пытался получить первый и последний деньИюль, но у меня только первый день.Вторая строка скрипта не работает.

@PowerShell "(Get-Date).AddMonths(1).ToString('01/MM/yyyy')" >>dates.txt 
$LastDayInMonthString = "$($(get-date).AddMonths(1).ToString("dd/mm/yyy"))$LastDayInMonth" >>dates.txt

Кто-то может сказать мне, что не так?

Я хотел .txt-файл вроде этого: 01/07/2018, 31/07/2018.
В первой строке записывается первый день следующего месяца,
, а во второй строке пишется последний день этого месяца.

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Гораздо более простым решением является вызов функции DaysInMonth

[DateTime]::DaysInMonth(2018, 11)

Для текущего месяца, который будет выглядеть следующим образом:

$today = get-date
$lastDay = [DateTime]::DaysInMonth($today.Year, $today.Month)
$firstDate = [DateTime]::new($today.Year, $today.Month, 1)
$lastDate  = [DateTime]::new($today.Year, $today.Month, $lastDay)

$firstDate
$lastDate

Это также работает для любых препятствующих изменениям летнего времени идругие странные вещи, которые могут случиться с часовыми поясами и т. д.

Или, если вам нужны чистые строки:

(get-date -Format "yyyy/MM") + "/1"
(get-date -Format "yyyy/MM") + "/" + [DateTime]::DaysInMonth((get-date).Year, (get-date).Month)
0 голосов
/ 10 июня 2018

Самый простой способ - взять последний день предыдущего года и добавить к нему 1,12 месяца:

1..12 | % { (New-Object DateTime(2017,12,31)).AddMonths($_) }

Вывод будет в формате даты / времени пользователя, в моем случае голландском.:

woensdag 31 januari 2018 00:00:00
woensdag 28 februari 2018 00:00:00
zaterdag 31 maart 2018 00:00:00
maandag 30 april 2018 00:00:00
donderdag 31 mei 2018 00:00:00
zaterdag 30 juni 2018 00:00:00
dinsdag 31 juli 2018 00:00:00
vrijdag 31 augustus 2018 00:00:00
zondag 30 september 2018 00:00:00
woensdag 31 oktober 2018 00:00:00
vrijdag 30 november 2018 00:00:00
maandag 31 december 2018 00:00:00

При необходимости вы можете отформатировать его так, как вам нужно, например,

1..12 | % { (New-Object DateTime(2017,12,31)).AddMonths($_).ToString("yyyyMMdd") }

20180131
20180228
20180331
20180430
20180531
20180630
20180731
20180831
20180930
20181031
20181130
20181231
0 голосов
/ 10 июня 2018

Редактировать удалил ненужные корректировки времени только для даты

В PowerShell получить первый и последний день следующий месяц

$CIGB = New-Object System.Globalization.CultureInfo('en-GB')
'{0}, {1}' -f (Get-Date -Day 1).AddMonths(1).ToString('d',$CIGB),
  (Get-Date -Day 1).AddMonths(2).AddDays(-1).ToString('d',$CIGB)|sc dates.txt

Мне необходим $ CIGB, потому что мой локальный разделитель даты переопределяет /
Если ваш краткий формат даты 'd' возвращает dd/MM/yyyy первую строку и ,$CIGB можно удалить.

01/07/2018, 31/07/2018

Это может быть заключено в одну (хотя и довольно длинную) строку.

powershell -nop -c "$CIGB=New-Object System.Globalization.CultureInfo('en-GB');'{0}, {1}' -f (Get-Date -Day 1).AddMonths(1).ToString('d',$CIGB),(Get-Date -Day 1).AddMonths(2).AddDays(-1).ToString('d',$CIGB)">>dates.txt

> type dates.txt
01/07/2018, 31/07/2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...