上周一午夜在Powershell举行

时间:2014-02-09 21:35:38

标签: date powershell time

我正在尝试破解一个脚本,该脚本返回今天和本月收到的某些邮箱收到的电子邮件数量。我写了这个并且对自己感觉良好,直到我意识到我的逻辑是错误的并且它返回了过去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"))

以01 /开头,并将今天的月份和年份添加为字符串然后追加午夜时间并将整个事物捆绑到system.time对象中,但是我不能用这周来做。

System.time对象有一个.DayOfWeek属性,我可以切换它以确定我们从上周一开始的天数,并且我有一个$ Monday变量,其中包含上周一的这个时间,如何修改该变量以引用上周一的午夜

6 个答案:

答案 0 :(得分:6)

本月第一个星期一

do {
    $n++
    $date = (date -Hour 0 -Minute 0 -Second 0).AddDays(-$n)
}
Until ( `
    $date.DayOfWeek -eq "Monday" -and `
    $date.Day -le 7 `
)

本周的第一个星期一

$n = 0
do {
    $date = (date -Hour 0 -Minute 0 -Second 0).AddDays(-$n)
    $n++
}
Until ( $date.DayOfWeek -eq "Monday" )

答案 1 :(得分:4)

也许,这是你的朋友:

([int](Get-date).DayOfWeek)

这会将DayOfWeek属性转换为星期几的数字......

例如:

(Get-Date 0:00).AddDays(-([int](Get-date).DayOfWeek)+1)

答案 2 :(得分:3)

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

$today = Get-Date
$delta = $today.DayOfWeek.value__ - 1

$today.AddDays(-$delta).Date

Date属性返回时间设置为00:00:00的日期,因此您无需计算时间。

请注意,星期一上面的代码会返回当前日期。如果您希望代码返回上一个星期一,则需要将第二行更改为:

$delta = ($today.DayOfWeek.value__ + 5) % 7 + 1

该月的第一天可以用类似的方式计算:

$today = Get-Date
$delta = $today.Day - 1

$today.AddDays(-$delta).Date

答案 3 :(得分:2)

让这一个工作任何一天:

((Get-Date).adddays(-(6+(Get-Date -UFormat %u)))).date

答案 4 :(得分:1)

试试这个:

$i=0
do { $LastMonday = (Get-Date).AddDays(--$i).Date }
until ( $LastMonday.DayofWeek -eq 'Monday' )

$LastMonday

Monday, February 03, 2014 12:00:00 AM

DateTime对象的Date属性是当天午夜的日期时间。

答案 5 :(得分:1)

本周日(假设周日开始):

$sunday = (Get-Date).AddDays(-1 * (Get-Date).DayOfWeek.Value__).Date

本周一:

$monday = (Get-Date).AddDays((-1 * (Get-Date).DayOfWeek.Value__) + 1).Date

本周二:

$tuesday = (Get-Date).AddDays((-1 * (Get-Date).DayOfWeek.Value__) + 2).Date

等。周三至周六等。