You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell生日倒计时脚本转HTML开发:现有代码求完善指导

Got it, let's work through this together to get your birthday countdown script polished and converted to a nice HTML file. Here's a step-by-step breakdown:

Step 1: Fix & Enhance Your PowerShell Script

First, your current code has a few gaps we need to address:

  • The function name Date conflicts with PowerShell's built-in Get-Date cmdlet—let's rename it to something unique like Get-BirthdayCountdown.
  • It doesn't handle cases where your birthday has already passed this year (e.g., it's November and your birthday is March)—we'll auto-switch to calculating next year's birthday.
  • There's no input validation, so invalid dates (like February 30) will break the script—we'll add checks to ensure valid month/day entries.

Here's the refined script:

function Get-BirthdayCountdown {
    # Get user name
    $Name = Read-Host "Please enter your name"

    # Validate birth month (1-12)
    do {
        $BirthMonth = Read-Host "Please enter your Month of Birthday (1-12)"
    } while ($BirthMonth -notmatch '^[1-9]$|^1[0-2]$')

    # Validate birth day matches the selected month (handles leap years)
    do {
        $BirthDay = Read-Host "Please enter your Day of Birthday"
        $isValidDay = try {
            [DateTime]"$(Get-Date).Year/$BirthMonth/$BirthDay" | Out-Null
            $true
        } catch {
            Write-Host "Invalid day for month $BirthMonth—try again!"
            $false
        }
    } while (-not $isValidDay)

    # Calculate target birthday date
    $currentYear = (Get-Date).Year
    $targetDate = [DateTime]"$currentYear/$BirthMonth/$BirthDay"

    # Switch to next year if birthday already passed
    if ($targetDate -lt (Get-Date)) {
        $targetDate = $targetDate.AddYears(1)
        $currentYear += 1
    }

    # Calculate days remaining
    $timeSpan = New-TimeSpan -End $targetDate
    $NumberOfDays = $timeSpan.Days

    # Prepare dynamic message
    switch ($NumberOfDays) {
        0 { $message = "Happy Birthday $Name! Today is your special day - yeah! 🎉" }
        1 { $message = "Hey $Name, your birthday is tomorrow! Only 1 day left! 🎂" }
        default { $message = "Hi $Name, there are $NumberOfDays days left until your $currentYear birthday! 🎈" }
    }

    # Return structured data for HTML generation
    return @{
        Message = $message
        TargetDate = $targetDate.ToString("yyyy-MM-dd")
        Name = $Name
        DaysRemaining = $NumberOfDays
    }
}

# Run the function to get countdown data
$countdownData = Get-BirthdayCountdown
Step 2: Generate the MyBirthday.html File

Now we'll take the data from the script and inject it into a styled HTML template. Add this code to the end of your script to create the HTML file:

# Define HTML template with dynamic placeholders
$htmlTemplate = @"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>$($countdownData.Name)'s Birthday Countdown</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 2rem auto;
            padding: 2rem;
            text-align: center;
            background-color: #f0f8ff;
        }
        .countdown-card {
            background: white;
            padding: 3rem;
            border-radius: 15px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
        .days-left {
            font-size: 3rem;
            font-weight: bold;
            color: #ff6b6b;
            margin: 1.5rem 0;
        }
        .birthday-date {
            color: #4ecdc4;
            font-size: 1.2rem;
        }
        .happy-birthday {
            color: #ffd166;
            font-size: 2.5rem;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="countdown-card">
        <h1>Birthday Countdown for $($countdownData.Name)</h1>
        $(if ($countdownData.DaysRemaining -eq 0) {
            "<p class='happy-birthday'>$($countdownData.Message)</p>"
        } else {
            "<p>$($countdownData.Message)</p><div class='days-left'>$($countdownData.DaysRemaining)</div><p class='birthday-date'>Your birthday is on $($countdownData.TargetDate)</p>"
        })
    </div>
</body>
</html>
"@

# Save the HTML to file
$htmlTemplate | Out-File -Path "MyBirthday.html" -Encoding UTF8

Write-Host "Success! MyBirthday.html has been created—check your current directory."
Step 3: Optional Add-On: Auto-Updating Countdown

If you want the HTML page to automatically refresh the day count without re-running the PowerShell script, add this JavaScript snippet inside the <body> tag of the HTML template:

<script>
    const targetDate = new Date("$($countdownData.TargetDate)");
    
    function updateCountdown() {
        const now = new Date();
        const timeDiff = targetDate - now;
        const daysRemaining = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
        
        if (daysRemaining <= 0) {
            document.querySelector('.days-left')?.remove();
            document.querySelector('.birthday-date')?.remove();
            document.querySelector('.countdown-card').innerHTML += "<p class='happy-birthday'>Happy Birthday $($countdownData.Name)! Today is your special day - yeah! 🎉</p>";
        } else {
            document.querySelector('.days-left').textContent = daysRemaining;
        }
    }
    
    // Update on page load and every hour
    updateCountdown();
    setInterval(updateCountdown, 3600000);
</script>

How to Test

Run the full script, input your name, birth month, and day. It will:

  • Validate your input to avoid errors
  • Calculate the correct days remaining (even if your birthday was earlier this year)
  • Generate a clean, responsive HTML file with your countdown

内容的提问来源于stack exchange,提问作者J Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:37:13