距离下一个生日还有多少天

Number of days until next birthday

我的问题是计算下一个生日的天数。
我已经输入和计算了,但是日期的格式是错误的。

我希望我的程序使用以下格式计算您的下一个生日天数:DD.MM.YYYY 且不带小数。此外,当我输入 "hello" 之类的内容时,它不应该崩溃,但会给我一个错误,指出它不是有效日期。

#Clearing
Clear-Host

#Liste von Variabeln
$geburtstag
$datumvonheute
$zeitbisgeburtstag

#initialisieren von Variabeln
$geburtstag = Get-Date 
$datumvonheute = Get-Date
$zeitbisgeburtstag = ""

function ParseDate([string]$datumvonheute)
{
    try{
        $result = 0
        if (!([DateTime]::TryParse($datumvonheute, [ref]$result)))
        {
            throw "Es wurde ein falsches Datum eingegeben! $geburtstag"
        }
        $isok = $true
        $geburtstag.ToDateTime($geburtstag)

    } catch {
        $result
        Write-Host "Falsche Eingabe!"
        $isok = $false
    }
}
do{
    $geburtstag = Read-Host "Bitte geben Sie ihren nächsten Geburtsdatum ein [dd.mm.yyyy]"
    ParseDate($geburtstag)
} until($isok = $true)

$FromDate  =[DateTime] $datumvonheute
$ToDate    =[DateTime] $geburtstag

($ToDate - $FromDate).TotalDays

由于多种原因,您的格式日期可能是错误的,但我假设这是因为文化不一样:在您的笔记本电脑上它可能是 en-US 文化 (MM/dd/yyyy) , 而您输入的日期格式是 de-de culture (dd/MM/yyyy).

您可以在开始时定义文化,然后使用它根据您的需要进行适当设置。

$cultureInfo = New-Object System.Globalization.CultureInfo('de-de')

你的问题在这里:

$geburtstag.ToDateTime($geburtstag)

您需要对其进行解析以获得正确的日期:

$geburtstag = [datetime]::Parse($datumvonheute,$cultureInfo)

我会计算 $fromDate - $toDate ,反之亦然

#Clearing
Clear-Host
$cultureInfo = New-Object System.Globalization.CultureInfo('de-de')
#Liste von Variabeln
$geburtstag
$datumvonheute
$zeitbisgeburtstag

#initialisieren von Variabeln
$geburtstag = Get-Date 
$datumvonheute = Get-Date
$zeitbisgeburtstag = ""

function ParseDate([string]$datumvonheute)
{
    try{
        $result = 0
        if (!([DateTime]::TryParse($datumvonheute, [ref]$result)))
        {
            throw "Es wurde ein falsches Datum eingegeben! $geburtstag"
        }
        $isok = $true
        #$geburtstag.ToDateTime($geburtstag)
        $geburtstag = [datetime]::Parse($datumvonheute,$cultureInfo)

    } catch {
        $result
        Write-Host "Falsche Eingabe!"
        $isok = $false
    }
}
do{
    $geburtstag = Read-Host "Bitte geben Sie ihren nächsten Geburtsdatum ein [dd.mm.yyyy]"
    ParseDate($geburtstag)
} until($isok = $true)

$FromDate  =[DateTime] $datumvonheute
$ToDate    =[DateTime] $geburtstag

$totaldays = ($FromDate - $ToDate).Days

Write-Output "Total Days: $totaldays"