Private/ConvertTo-UnixTime.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function ConvertTo-UnixTime {
    <#
    .SYNOPSIS
        Convert datetime objects to UNIX time.
 
    .DESCRIPTION
        Convert System.DateTime objects to UNIX time.
 
    .INPUTS
        System.DateTime
 
    .NOTES
        - Troy Lindsay
        - Twitter: @troylindsay42
        - GitHub: tlindsay42
 
    .EXAMPLE
        ConvertTo-UnixTime -Date ( Get-Date -Date '2018-07-21 10:33:18' )
        Returns '1532187198'.
 
    .EXAMPLE
        ( Get-Date -Date '2018-07-21 10:33:18' ) | ConvertTo-UnixTime
        Processes the pipeline value and returns '1532187198'.
 
    .EXAMPLE
        ConvertTo-UnixTime ( Get-Date -Date '2018-07-21 10:33:18' )
        Uses positional parameter and returns '1532187198'.
 
    .LINK
        https://tlindsay42.github.io/PSRyver/Private/ConvertTo-UnixTime/
 
    .LINK
        https://github.com/tlindsay42/PSRyver/blob/master/PSRyver/Private/ConvertTo-UnixTime.ps1
    #>

    [CmdletBinding(
        HelpUri = 'https://tlindsay42.github.io/PSRyver/Private/ConvertTo-UnixTime/'
    )]
    [OutputType( [Int32] )]
    param (
        # The System.DateTime formatted date & time.
        [Parameter(
            Mandatory = $true,
            Position = 0,
            ValueFromPipeline = $true
        )]
        [DateTime]
        $Date
    )

    begin {
        $function = $MyInvocation.MyCommand.Name
        Write-Verbose -Message "Beginning: '${function}'."
    }

    process {
        Write-Verbose -Message (
            "Processing: '${function}' with ParameterSetName '$( $PSCmdlet.ParameterSetName )' and Parameters: " +
            ( $PSBoundParameters | Remove-SensitiveData | Format-Table -AutoSize | Out-String )
        )

        $unixEpochStart = New-Object -TypeName 'DateTime' -ArgumentList 1970, 1, 1, 0, 0, 0, ( [DateTimeKind]::Utc )
        [Int32] ( $Date.ToUniversalTime() - $unixEpochStart ).TotalSeconds
    }

    end {
        Write-Verbose -Message "Ending: '${function}'."
    }
}