PowerShell Распечатать эту рабочую неделю пн-пт - PullRequest
0 голосов
/ 24 января 2019

Я бы хотел, чтобы Powershell определил текущую неделю и печатал понедельник - пятницу в формате:

mm/dd/yyyy - mm/dd/yyyy

Я нашел способ получить хороший день недели, но мне бы хотелось, чтобы он показывал даты.

То, что у меня пока есть, работает, но если я бегу в любой день, кроме понедельника, даты будут выключены:

$bar = "------------------------------------"
$today = (Get-Date)
$dates = @($today.AddDays(0).ToString('MM-dd-yyyy'),
$today.AddDays(1).ToString('MM-dd-yyyy'),
$today.AddDays(2).ToString('MM-dd-yyyy'),
$today.AddDays(3).ToString('MM-dd-yyyy'),
$today.AddDays(4).ToString('MM-dd-yyyy'))

$result = "`n{0}`n{1}`n`n`n{2}`n{3}`n`n`n{4}`n{5}`n`n`n{6}`n{7}`n`n`n{8}`n{9}`n" -f $dates[0], $bar, $dates[1], $bar, $dates[2], $bar, $dates[3], $bar, $dates[4], $bar

echo $result

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Я столкнулся с требованием получить дату из дня недели и написал функцию для возврата [DateTime].

Использование этой функции и ToString() для форматирования даты в соответствии с вашими требованиями дает вывод:

2019/01/21 - 2019/01/25

Код:

Function Get-DateFromDay {
    param(
        [Parameter(Mandatory = $true)]
        [ValidateSet('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')]
        [string]$WeekDay,

        [Int]$AddWeeks = 0
    )

    $DayNumber = @{
        'Saturday'  = 1; 
        'Sunday'    = 0; 
        'Monday'    = -1;
        'Tuesday'   = -2; 
        'Wednesday' = -3;
        'Thursday'  = -4
        'Friday'    = -5
    }

    [System.Datetime]$Today = Get-Date
    $NumDaysSinceDateFromDay = $Today.DayOfWeek.value__ + $DayNumber[$WeekDay]

    [System.Datetime]$DateFromDayThisWeek = $Today.AddDays(-$NumDaysSinceDateFromDay)
    $DateFromDayThisWeek.AddDays( + ($AddWeeks * 7))
}


$Monday = (Get-DateFromDay -WeekDay Monday).ToString('yyyy/MM/dd')
$Friday = (Get-DateFromDay -WeekDay Friday).ToString('yyyy/MM/dd')

Write-Output "$Monday - $Friday"

И несколько примеров использования для тех, кто встретит этот пост в будущем:

четверг на следующей неделе:

Get-DateFromDay -WeekDay Thursday -AddWeeks 1

Вторник на прошлой неделе:

Get-DateFromDay -WeekDay Tuesday -AddWeeks -1
0 голосов
/ 24 января 2019

это похоже на то, что вы хотите.[ ухмылка ] использует встроенный список дней недели, индексирует его с именем текущего дня недели, вычисляет 1-й день текущей недели, генерирует массив дат для текущей недели и, наконец, распечатывает его слинии и вертикальное расстояние, которые вы, кажется, хотите.

# for my locale, the 1st day is "Sunday"
$WeekDayList = [System.DayOfWeek].GetEnumNames()
$Line = '-' * 40
$Newline = [environment]::NewLine
$BlankLineCount = 3

# the ".Date" property gives you midnite, not "now"
$Today = (Get-Date).Date
$TodayNumber = $WeekDayList.IndexOf($Today.DayOfWeek.ToString())
$WeekStartDate = $Today.AddDays(-$TodayNumber)

$CurrentWeek = foreach ($Offset in 0..6)
    {
    $WeekStartDate.AddDays($Offset).ToString('yyyy-MM-dd')
    }

-join ($CurrentWeek -join "$Newline$Line$($Newline * $BlankLineCount)"), "$Line$($Newline * $BlankLineCount)"

вывод ...

2019-01-20
----------------------------------------


2019-01-21
----------------------------------------


2019-01-22
----------------------------------------


2019-01-23
----------------------------------------


2019-01-24
----------------------------------------


2019-01-25
----------------------------------------


2019-01-26
----------------------------------------


[not part of the output - needed to show that there are two blank lines above this one. [*grin*]     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...