上周一午夜在Powershell举行

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变量包含上周一的这个时间,如何修改该变量以引用午夜上周一?

Vas*_*kis 6

本月的第一个星期一

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)


Ans*_*ers 5

您可以这样计算上周一的日期:

$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)


Sco*_*ost 5

本周星期日(假设周从星期日开始):

$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)