PoshCode Archive  Artifact [4aed2ac8cb]

Artifact 4aed2ac8cb64ed5a3039fef128054f673c2984d33ede329c565393124660902f:

  • File Get-Calendar.ps1 — part of check-in [883fe60af8] at 2018-06-10 13:57:00 on branch trunk — History: (user: greg zakharov size: 1851)

# encoding: ascii
# api: powershell
# title: Get-Calendar
# description: History:
# version: 0.1
# type: function
# author: greg zakharov
# license: CC0
# function: Get-Calendar
# x-poshcode-id: 5550
# x-archived: 2014-11-05T00:06:12
# x-published: 2014-10-29T20:13:00
#
# 1.03 – fixed DoW shift
# 1.02 – added feature MondayFirstly (displays calendar starting from Monday)
# 1.01 – fixed ShortestDayNames
#
if (!(Test-Path alias:cal)) { Set-Alias cal Get-Calendar }

function Get-Calendar {
  <#
    .NOTES
        Author: greg zakharov
  #>
  param(
    [Parameter(Position=0)]
    [ValidateRange(1, 12)]
    [Int32]$Month = (date -u %m),
    
    [Parameter(Position=1)]
    [ValidateRange(2000, 9999)]
    [Int32]$Year = (date -u %Y),
    
    [Parameter(Position=2)]
    [Alias('m')]
    [Switch]$MondayFirstly
  )
  
  begin {
    [Globalization.DateTimeFormatInfo]::CurrentInfo.ShortestDayNames | % {$arr = @()}{$arr += $_}
    $cal = [Globalization.CultureInfo]::CurrentCulture.Calendar
    $dow = [Int32]$cal.GetDayOfWeek([DateTime]([String]$Month + '.1.' + [String]$Year))
    if ($MondayFirstly) {
      $arr = $arr[1..$arr.Length] + $arr[0]
      if (($dow = --$dow) -lt 0) { $dow = 6 }
    }
  }
  process {
    $loc = [Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames[$Month - 1] + ' ' + $Year
    $loc = [String]((' ' * [Math]::Round((20 - $loc.Length) / 2)) + $loc)
    
    if ($dow -ne 0) {for ($i = 0; $i -lt $dow; $i++) {$arr += (' ' * 2)}}
    1..$cal.GetDaysInMonth($Year, $Month) | % {
      if ($_.ToString().Length -eq 1) {$arr += ' ' + [String]$_}
      else {$arr += [String]$_}
    }
  }
  end {
    Write-Host $loc -fo Magenta
    for ($i = 0; $i -lt $arr.Length; $i += 6) {
      Write-Host $arr[$i..($i + 6)]
      $i++
    }
    ''
  }
}