在powershell上获得一个月的最后一天

时间:2018-06-10 16:42:22

标签: powershell

我尝试使用PowerShell在第一天和最后几天输入.txt文件。

在下面的例子中,我试图获得7月的第一天和最后一天,但我只是第一天到了。脚本的第二行不起作用。

@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 第一行写下个月的第一天,
第二行写下那个月的最后一天。

5 个答案:

答案 0 :(得分:5)

更简单的解决方案是调用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)

答案 1 :(得分:3)

一种简单的方法是占用上一年的最后一天并添加1..12个月:

--windows

输出将采用用户的日期/时间格式,在我的情况下为荷兰语:

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

答案 2 :(得分:1)

编辑删除了仅限日期的必要时间调整

在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

答案 3 :(得分:0)

这似乎很简单

$firstDate = [DateTime]::new($reportDate.Year, $reportDate.Month, 1)
$lastDate=$firstDate.AddMonths(1).AddDays(-1)

答案 4 :(得分:0)

可以将字符串传递给Get-Date。 -Format参数还接受字符串/变量。

# Get the previous month
$LastMonth = (Get-Date).AddMonths(-1)

# Format the first day of the month
$FirstDayOfMonth = $LastMonth | Get-Date -Format "yyyy/MM/01"

# Calculate the number of days (last day) in the month
$LastDay = [DateTime]::DaysInMonth($LastMonth.Year, $LastMonth.Month)

# Use it in the format parameter
$LastDayOfMonth = $LastMonth | Get-Date -Format "yyyy/MM/$lastDay"