Elo*_*mis 2 powershell time date
我正在尝试破解一个脚本,该脚本返回今天,本周和本月收到的和从某些邮箱发送的电子邮件数量.我写了这个并且对自己感觉良好,直到我意识到我的逻辑是错误的并且它返回了过去24小时(get-date.(adddays(-1))和最后7个连续24小时的句点(get-date.adddays( - 7))等
弄清楚从这个月的第一天开始计算并不是那么难,找到一个要复制的片段
$firstDayOfMonth = Get-Date ((("01/" + (Get-Date $today).Month).ToString() + "/" + ((Get-Date $today).Year).ToString() + " 00:00:00"))
Run Code Online (Sandbox Code Playgroud)
以01开头,并将今天的月份和年份作为字符串添加,然后追加午夜时间并将整个事物捆绑到system.time对象中,但我不能用一周这样做.
System.time对象有一个.DayOfWeek属性,我可以切换它以确定我们从上周一开始的天数,并且我有一个$ Monday变量包含上周一的这个时间,如何修改该变量以引用午夜上周一?
do {
$n++
$date = (date -Hour 0 -Minute 0 -Second 0).AddDays(-$n)
}
Until ( `
$date.DayOfWeek -eq "Monday" -and `
$date.Day -le 7 `
)
Run Code Online (Sandbox Code Playgroud)
$n = 0
do {
$date = (date -Hour 0 -Minute 0 -Second 0).AddDays(-$n)
$n++
}
Until ( $date.DayOfWeek -eq "Monday" )
Run Code Online (Sandbox Code Playgroud)
您可以这样计算上周一的日期:
$today = Get-Date
$delta = $today.DayOfWeek.value__ - 1
$today.AddDays(-$delta).Date
Run Code Online (Sandbox Code Playgroud)
该Date属性返回时间设置为 00:00:00 的日期,因此您不需要计算时间。
请注意,在星期一,上述代码返回当前日期。如果您希望代码返回上周一,您需要将第二行更改为:
$delta = ($today.DayOfWeek.value__ + 5) % 7 + 1
Run Code Online (Sandbox Code Playgroud)
该月的第一天可以用类似的方式计算:
$today = Get-Date
$delta = $today.Day - 1
$today.AddDays(-$delta).Date
Run Code Online (Sandbox Code Playgroud)
本周星期日(假设周从星期日开始):
$sunday = (Get-Date).AddDays(-1 * (Get-Date).DayOfWeek.Value__).Date
Run Code Online (Sandbox Code Playgroud)
本周星期一:
$monday = (Get-Date).AddDays((-1 * (Get-Date).DayOfWeek.Value__) + 1).Date
Run Code Online (Sandbox Code Playgroud)
本周星期二:
$tuesday = (Get-Date).AddDays((-1 * (Get-Date).DayOfWeek.Value__) + 2).Date
Run Code Online (Sandbox Code Playgroud)
周三至周六等
小智 5
也许,这是你的朋友:
([int](Get-date).DayOfWeek)
Run Code Online (Sandbox Code Playgroud)
这会将DayOfWeek属性转换为星期几...
例如:
(Get-Date 0:00).AddDays(-([int](Get-date).DayOfWeek)+1)
Run Code Online (Sandbox Code Playgroud)