我尝试使用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
第一行写下个月的第一天,
第二行写下那个月的最后一天。
答案 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"