Server : LiteSpeed
System : Linux terra.hostitbro.com 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User : outerorb ( 1091)
PHP Version : 8.1.34
Disable Function : mail
Directory :  /home2/outerorb/.trash/survey_system/

📁 Create New:
⬆️ Upload File:
Current Dir [ Writable ] Root [ Writable ]


OR Upload from URL:
URL: Save as:

📄 File: timezone_conversion.php

Path: /home2/outerorb/.trash/survey_system/timezone_conversion.php

Size: 21.49 KB

Permissions: 0666

<?php
require_once 'config.php';
if(!is_logged_in()){ header('Location: index.php'); exit; }
include __DIR__ . '/inc/header.php';

// Load area codes from JSON file
$area_code_timezones = json_decode(file_get_contents(__DIR__ . '/area_codes.json'), true);

// Simple area code to state mapping for major codes
$area_code_states = [
    '201' => 'New Jersey', '202' => 'District of Columbia', '203' => 'Connecticut', '205' => 'Alabama',
    '206' => 'Washington', '207' => 'Maine', '208' => 'Idaho', '209' => 'California', '210' => 'Texas',
    '212' => 'New York', '213' => 'California', '214' => 'Texas', '215' => 'Pennsylvania', '216' => 'Ohio',
    '217' => 'Illinois', '218' => 'Minnesota', '219' => 'Indiana', '224' => 'Illinois', '225' => 'Louisiana',
    '228' => 'Mississippi', '229' => 'Georgia', '231' => 'Michigan', '234' => 'Ohio', '239' => 'Florida',
    '240' => 'Maryland', '248' => 'Michigan', '251' => 'Alabama', '252' => 'North Carolina', '253' => 'Washington',
    '254' => 'Texas', '256' => 'Alabama', '260' => 'Indiana', '262' => 'Wisconsin', '267' => 'Pennsylvania',
    '269' => 'Michigan', '270' => 'Kentucky', '272' => 'Pennsylvania', '274' => 'Wisconsin', '276' => 'Virginia',
    '281' => 'Texas', '301' => 'Maryland', '302' => 'Delaware', '303' => 'Colorado', '304' => 'West Virginia',
    '305' => 'Florida', '307' => 'Wyoming', '308' => 'Nebraska', '309' => 'Illinois', '310' => 'California',
    '312' => 'Illinois', '313' => 'Michigan', '314' => 'Missouri', '315' => 'New York', '316' => 'Kansas',
    '317' => 'Indiana', '318' => 'Louisiana', '319' => 'Iowa', '320' => 'Minnesota', '321' => 'Florida',
    '323' => 'California', '325' => 'Texas', '330' => 'Ohio', '331' => 'Illinois', '334' => 'Alabama',
    '336' => 'North Carolina', '337' => 'Louisiana', '339' => 'Massachusetts', '346' => 'Texas', '347' => 'New York',
    '351' => 'Massachusetts', '352' => 'Florida', '360' => 'Washington', '361' => 'Texas', '385' => 'Utah',
    '386' => 'Florida', '401' => 'Rhode Island', '402' => 'Nebraska', '404' => 'Georgia', '405' => 'Oklahoma',
    '406' => 'Montana', '407' => 'Florida', '408' => 'California', '409' => 'Texas', '410' => 'Maryland',
    '412' => 'Pennsylvania', '413' => 'Massachusetts', '414' => 'Wisconsin', '415' => 'California',
    '417' => 'Missouri', '419' => 'Ohio', '423' => 'Tennessee', '424' => 'California', '425' => 'Washington',
    '430' => 'Texas', '432' => 'Texas', '434' => 'Virginia', '435' => 'Utah', '440' => 'Ohio',
    '442' => 'California', '443' => 'Maryland', '458' => 'Oregon', '469' => 'Texas', '470' => 'Georgia',
    '475' => 'Connecticut', '478' => 'Georgia', '479' => 'Arkansas', '480' => 'Arizona', '484' => 'Pennsylvania',
    '501' => 'Arkansas', '502' => 'Kentucky', '503' => 'Oregon', '504' => 'Louisiana', '505' => 'New Mexico',
    '507' => 'Minnesota', '508' => 'Massachusetts', '509' => 'Washington', '510' => 'California',
    '512' => 'Texas', '513' => 'Ohio', '515' => 'Iowa', '516' => 'New York', '517' => 'Michigan',
    '518' => 'New York', '520' => 'Arizona', '530' => 'California', '540' => 'Virginia', '541' => 'Oregon',
    '551' => 'New Jersey', '559' => 'California', '561' => 'Florida', '562' => 'California', '563' => 'Iowa',
    '564' => 'Washington', '567' => 'Ohio', '570' => 'Pennsylvania', '571' => 'Virginia', '573' => 'Missouri',
    '574' => 'Indiana', '575' => 'New Mexico', '580' => 'Oklahoma', '585' => 'New York', '586' => 'Michigan',
    '601' => 'Mississippi', '602' => 'Arizona', '603' => 'New Hampshire', '605' => 'South Dakota',
    '606' => 'Kentucky', '607' => 'New York', '608' => 'Wisconsin', '609' => 'New Jersey', '610' => 'Pennsylvania',
    '612' => 'Minnesota', '614' => 'Ohio', '615' => 'Tennessee', '616' => 'Michigan', '617' => 'Massachusetts',
    '618' => 'Illinois', '619' => 'California', '620' => 'Kansas', '623' => 'Arizona', '626' => 'California',
    '628' => 'California', '630' => 'Illinois', '631' => 'New York', '636' => 'Missouri', '641' => 'Iowa',
    '646' => 'New York', '650' => 'California', '651' => 'Minnesota', '657' => 'California', '660' => 'Missouri',
    '661' => 'California', '662' => 'Mississippi', '667' => 'Maryland', '669' => 'California', '678' => 'Georgia',
    '681' => 'West Virginia', '682' => 'Texas', '701' => 'North Dakota', '702' => 'Nevada', '703' => 'Virginia',
    '704' => 'North Carolina', '706' => 'Georgia', '707' => 'California', '708' => 'Illinois', '712' => 'Iowa',
    '713' => 'Texas', '714' => 'California', '715' => 'Wisconsin', '716' => 'New York', '717' => 'Pennsylvania',
    '718' => 'New York', '719' => 'Colorado', '720' => 'Colorado', '724' => 'Pennsylvania', '725' => 'Nevada',
    '727' => 'Florida', '731' => 'Tennessee', '732' => 'New Jersey', '734' => 'Michigan', '737' => 'Texas',
    '740' => 'Ohio', '747' => 'California', '754' => 'Florida', '757' => 'Virginia', '760' => 'California',
    '762' => 'Georgia', '763' => 'Minnesota', '765' => 'Indiana', '769' => 'Mississippi', '770' => 'Georgia',
    '772' => 'Florida', '773' => 'Illinois', '774' => 'Massachusetts', '775' => 'Nevada', '781' => 'Massachusetts',
    '785' => 'Kansas', '786' => 'Florida', '801' => 'Utah', '802' => 'Vermont', '803' => 'South Carolina',
    '804' => 'Virginia', '805' => 'California', '806' => 'Texas', '808' => 'Hawaii', '810' => 'Michigan',
    '812' => 'Indiana', '813' => 'Florida', '814' => 'Pennsylvania', '815' => 'Illinois', '816' => 'Missouri',
    '817' => 'Texas', '818' => 'California', '828' => 'North Carolina', '830' => 'Texas', '831' => 'California',
    '832' => 'Texas', '843' => 'South Carolina', '845' => 'New York', '847' => 'Illinois', '848' => 'New Jersey',
    '850' => 'Florida', '856' => 'New Jersey', '857' => 'Massachusetts', '858' => 'California', '859' => 'Kentucky',
    '860' => 'Connecticut', '862' => 'New Jersey', '863' => 'Florida', '864' => 'South Carolina',
    '865' => 'Tennessee', '870' => 'Arkansas', '872' => 'Illinois', '878' => 'Pennsylvania', '901' => 'Tennessee',
    '903' => 'Texas', '904' => 'Florida', '906' => 'Michigan', '907' => 'Alaska', '908' => 'New Jersey',
    '909' => 'California', '910' => 'North Carolina', '912' => 'Georgia', '913' => 'Kansas', '914' => 'New York',
    '915' => 'Texas', '916' => 'California', '917' => 'New York', '918' => 'Oklahoma', '919' => 'North Carolina',
    '920' => 'Wisconsin', '925' => 'California', '928' => 'Arizona', '929' => 'New York', '930' => 'Indiana',
    '931' => 'Tennessee', '934' => 'New York', '936' => 'Texas', '937' => 'Ohio', '938' => 'Alabama',
    '940' => 'Texas', '941' => 'Florida', '947' => 'Michigan', '949' => 'California', '951' => 'California',
    '952' => 'Minnesota', '954' => 'Florida', '956' => 'Texas', '959' => 'Connecticut', '970' => 'Colorado',
    '971' => 'Oregon', '972' => 'Texas', '973' => 'New Jersey', '978' => 'Massachusetts', '979' => 'Texas',
    '980' => 'North Carolina', '984' => 'North Carolina', '985' => 'Louisiana', '989' => 'Michigan'
];

$results = null;
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $area_code = trim($_POST['area_code'] ?? '');
    $callback_type = $_POST['callback_type'] ?? '';
    $callback_value = trim($_POST['callback_value'] ?? '');
    if (!isset($area_code_timezones[$area_code])) {
        $error = 'Unknown or unsupported area code.';
    } else {
        // Handle both old format (string) and new format (object with timezone and state)
        $timezone_data = $area_code_timezones[$area_code];
        if (is_string($timezone_data)) {
            $us_tz_id = $timezone_data;
            $state_name = $area_code_states[$area_code] ?? 'Unknown State';
        } else {
            $us_tz_id = $timezone_data['timezone'];
            $state_name = $timezone_data['state'] ?? ($area_code_states[$area_code] ?? 'Unknown State');
        }
        
        $us_tz = new DateTimeZone($us_tz_id);
        $now_us = new DateTime('now', $us_tz);
        $current_us_time = $now_us->format('Y-m-d H:i:s');
        $callback_us = clone $now_us;
        if ($callback_type === 'after_hours' && is_numeric($callback_value)) {
            $callback_us->modify('+' . intval($callback_value) . ' hours');
        } elseif ($callback_type === 'at_time' && preg_match('/^(\d{1,2}):(\d{2})\s*(AM|PM)?$/i', $callback_value, $m)) {
            $hour = intval($m[1]);
            $minute = intval($m[2]);
            $ampm = strtoupper($m[3] ?? '');
            if ($ampm === 'PM' && $hour < 12) $hour += 12;
            if ($ampm === 'AM' && $hour == 12) $hour = 0;
            $callback_us->setTime($hour, $minute, 0);
        } elseif ($callback_type === 'at_time' && preg_match('/^(\d{1,2})\s*(AM|PM)$/i', $callback_value, $m)) {
            $hour = intval($m[1]);
            $minute = 0;
            $ampm = strtoupper($m[2] ?? '');
            if ($ampm === 'PM' && $hour < 12) $hour += 12;
            if ($ampm === 'AM' && $hour == 12) $hour = 0;
            $callback_us->setTime($hour, $minute, 0);
        } elseif ($callback_type === 'at_time' && preg_match('/^(\d{1,2}):(\d{2})$/', $callback_value, $m)) {
            $hour = intval($m[1]);
            $minute = intval($m[2]);
            $callback_us->setTime($hour, $minute, 0);
        } else {
            $error = 'Invalid callback time format.';
        }
        if (!$error) {
            $tz_ist = new DateTimeZone('Asia/Kolkata');
            $callback_us_ist = clone $callback_us;
            $callback_us_ist->setTimezone($tz_ist);
      // Map PHP timezone to user-friendly US timezone name
      $tz_map = [
        'America/New_York' => 'Eastern',
        'America/Detroit' => 'Eastern',
        'America/Chicago' => 'Central',
        'America/Indiana/Indianapolis' => 'Eastern',
        'America/Denver' => 'Mountain',
        'America/Phoenix' => 'Mountain',
        'America/Los_Angeles' => 'Pacific',
        'America/Anchorage' => 'Alaska',
        'Pacific/Honolulu' => 'Hawaii',
        'America/Boise' => 'Mountain',
        'America/Indiana/Knox' => 'Central',
        'America/Indiana/Vincennes' => 'Eastern',
        'America/Indiana/Winamac' => 'Eastern',
        'America/Kentucky/Louisville' => 'Eastern',
        'America/Kentucky/Monticello' => 'Eastern',
        'America/North_Dakota/Center' => 'Central',
        'America/North_Dakota/New_Salem' => 'Central',
        'America/North_Dakota/Beulah' => 'Central',
      ];
      $us_tz_name = $tz_map[$us_tz_id] ?? $us_tz_id;
      $results = [
        'current_us_time' => $now_us->format('Y-m-d g:i A'),
        'callback_us_time' => $callback_us->format('Y-m-d g:i A'),
        'callback_ist_time' => $callback_us_ist->format('Y-m-d g:i A'),
        'us_tz' => $us_tz_name,
        'state' => $state_name,
        'area_code' => $area_code,
      ];
        }
    }
}
?>
<div class="container mt-4">
  <h4 class="mb-4">Timezone Conversion</h4>
  <div class="row justify-content-center">
    <div class="col-md-7 col-lg-6">
      <div class="card shadow-sm border-primary mb-4" style="border-width:2px;">
        <div class="card-body">
          <h5 class="mb-3">Callback time by Area Code</h5>
          <form method="post">
            <div class="mb-3">
              <label for="area_code" class="form-label">Customer's USA Area Code</label>
              <input type="text" class="form-control" id="area_code" name="area_code" required maxlength="3" pattern="\d{3}" placeholder="e.g. 212">
            </div>
            <div class="mb-3">
              <label class="form-label">Callback Time</label>
              <div class="input-group">
                <select name="callback_type" class="form-select" required style="max-width: 200px;">
                  <option value="after_hours">After N hours</option>
                  <option value="at_time">At specific time (e.g. 4 PM, 16:00)</option>
                </select>
                <input type="text" class="form-control" name="callback_value" required placeholder="e.g. 5 (for hours) or 4 PM or 16:00">
              </div>
            </div>
            <div class="d-grid gap-2">
              <button type="submit" class="btn btn-primary btn-lg">Convert</button>
            </div>
          </form>
          <?php if ($error): ?>
            <div class="alert alert-danger mt-3 mb-0"><?= h($error) ?></div>
          <?php endif; ?>
        </div>
      </div>
      <?php if ($results): ?>
        <div id="resultCard" class="card mb-3 shadow-sm border-primary animated-card" style="max-width: 500px; margin: 0 auto; position: relative;">
          <button type="button" class="btn-close position-absolute top-0 end-0 m-2" aria-label="Close" onclick="document.getElementById('resultCard').style.display='none';"></button>
          <div class="card-body text-center">
            <h5 class="card-title text-primary mb-3 result-title">📞 Callback Time Conversion</h5>
            <ul class="list-group list-group-flush">
              <li class="list-group-item">
                <span class="fw-bold">Area Code:</span> <?= h($results['area_code']) ?>
              </li>
              <li class="list-group-item">
                <span class="fw-bold">State:</span> <?= h($results['state']) ?>
              </li>
              <li class="list-group-item">
                <span class="fw-bold">Customer's Timezone:</span> <?= h($results['us_tz']) ?>
              </li>
              <li class="list-group-item">
                <span class="fw-bold">Current Local Time (Customer):</span> <?= h($results['current_us_time']) ?>
              </li>
              <li class="list-group-item">
                <span class="fw-bold">Callback Time (Customer):</span> <?= h($results['callback_us_time']) ?>
              </li>
              <li class="list-group-item">
                <span class="fw-bold">Equivalent Indian Time (IST):</span>
                <span class="result-highlight"> <?= h($results['callback_ist_time']) ?> </span>
              </li>
            </ul>
          </div>
        </div>
        <style>
          .animated-card {
            animation: pop-in 0.7s cubic-bezier(.68,-0.55,.27,1.55) both;
            border-width: 2px !important;
          }
          @keyframes pop-in {
            0% { transform: scale(0.8); opacity: 0; }
            80% { transform: scale(1.05); opacity: 1; }
            100% { transform: scale(1); }
          }
          .btn-close {
            z-index: 2;
          }
          
          /* Light mode specific styles */
          body:not(.dark-mode) .result-title {
            font-size: 1.4rem; 
            font-weight: 500; 
            letter-spacing: 1px;
          }
          body:not(.dark-mode) .result-highlight {
            font-size: 1.35rem; 
            color: #1a237e; 
            font-weight: 600;
          }
          
          /* Dark mode styles */
          body.dark-mode .result-title {
            font-size: 1.4rem; 
            font-weight: 500; 
            letter-spacing: 1px;
          }
          body.dark-mode .result-highlight {
            font-size: 1.35rem; 
            color: #90caf9; 
            font-weight: 600;
          }
        </style>
      <?php endif; ?>
    </div>
  </div>
  <?php
  // --- Current time by timezone/state block ---
  // Prefer user-friendly timezone abbreviations (EST/PST/MST/CST etc.) mapped to TZ identifiers
  $abbr_map = [
    'EST' => ['tz' => 'America/New_York', 'label' => 'Eastern (EST)'],
    'CST' => ['tz' => 'America/Chicago', 'label' => 'Central (CST)'],
    'MST' => ['tz' => 'America/Denver', 'label' => 'Mountain (MST)'],
    'PST' => ['tz' => 'America/Los_Angeles', 'label' => 'Pacific (PST)'],
    'AZT' => ['tz' => 'America/Phoenix', 'label' => 'Arizona (MST/AZ)'],
    'AKST' => ['tz' => 'America/Anchorage', 'label' => 'Alaska (AKST)'],
    'HST' => ['tz' => 'Pacific/Honolulu', 'label' => 'Hawaii (HST)'],
  ];
  $abbr_keys = array_keys($abbr_map);
  // Build timezone set from area_code_timezones for fallback (ensure $tz_set is defined)
  $tz_set = [];
  foreach ($area_code_timezones as $ac => $tzdata) {
    if (is_string($tzdata)) {
      $tz_set[$tzdata] = true;
    } elseif (is_array($tzdata) && !empty($tzdata['timezone'])) {
      $tz_set[$tzdata['timezone']] = true;
    }
  }
  // Add a few common zones if missing
  $common = ['America/New_York','America/Chicago','America/Denver','America/Los_Angeles','America/Phoenix','America/Anchorage','Pacific/Honolulu'];
  foreach ($common as $c) $tz_set[$c] = true;
  // keep previous full timezone list (for state mapping fallback)
  $timezones = array_keys($tz_set);
  sort($timezones);

  // Build state list from area_code_states
  $states = array_values($area_code_states);
  $states = array_unique($states);
  sort($states);

  $selected_abbr = $_GET['abbr'] ?? '';
  $selected_tz = $_GET['tz'] ?? '';
  $selected_state = $_GET['state'] ?? '';
  // If user selected an abbreviation, map it to a tz identifier (abbr takes precedence)
  if ($selected_abbr && isset($abbr_map[$selected_abbr])) {
      $selected_tz = $abbr_map[$selected_abbr]['tz'];
      $display_abbr = $selected_abbr;
  }
  $current_time_str = '';
  $display_abbr = $display_abbr ?? '';
  if ($selected_tz) {
      try {
          $dtz = new DateTimeZone($selected_tz);
          $dt = new DateTime('now', $dtz);
          $current_time_str = $dt->format('Y-m-d g:i A');
          // Find abbr if not set
          if (!$display_abbr) {
              foreach ($abbr_map as $abbr => $data) {
                  if ($data['tz'] === $selected_tz) {
                      $display_abbr = $abbr;
                      break;
                  }
              }
          }
      } catch (Exception $e) {
          $current_time_str = 'Invalid timezone';
      }
  } elseif ($selected_state) {
      // Try to find a timezone for the selected state via area_code_timezones mapping
      $found_tz = '';
      foreach ($area_code_timezones as $ac => $tzdata) {
          $state_candidate = '';
          if (is_string($tzdata)) {
              $state_candidate = $area_code_states[$ac] ?? '';
          } elseif (is_array($tzdata)) {
              $state_candidate = $tzdata['state'] ?? ($area_code_states[$ac] ?? '');
              if (!empty($tzdata['timezone'])) $found_tz = $tzdata['timezone'];
          }
          if (!empty($state_candidate) && strcasecmp($state_candidate, $selected_state) === 0) {
              if (is_string($tzdata)) $found_tz = $tzdata;
              break;
          }
      }
      if ($found_tz) {
          try {
              $dtz = new DateTimeZone($found_tz);
              $dt = new DateTime('now', $dtz);
              $current_time_str = $dt->format('Y-m-d g:i A');
              $selected_tz = $found_tz;
              // Find abbr
              foreach ($abbr_map as $abbr => $data) {
                  if ($data['tz'] === $selected_tz) {
                      $display_abbr = $abbr;
                      break;
                  }
              }
          } catch (Exception $e) {
              $current_time_str = 'Could not resolve timezone for selected state';
          }
      } else {
          $current_time_str = 'No timezone mapping found for selected state';
      }
  }
  ?>
  <div class="row justify-content-center mt-3">
    <div class="col-md-7 col-lg-6">
      <div class="card shadow-sm border-primary mb-4" style="border-width:2px;">
      <div class="card-body">
        <h5 class="mb-3">Current Time by Timezone / State</h5>
        <div class="mb-3">
          <form method="get" class="d-flex align-items-end">
            <div class="me-2 flex-grow-1">
              <label for="abbr" class="form-label">Choose Timezone (abbr.)</label>
              <select id="abbr" name="abbr" class="form-select" style="max-width: 250px;">
                <option value="">-- select timezone --</option>
                <?php foreach ($abbr_keys as $ak): ?>
                  <?php $meta = $abbr_map[$ak]; ?>
                  <option value="<?= h($ak) ?>" <?= ($ak === $selected_abbr) ? 'selected' : '' ?>><?= h($meta['label']) ?></option>
                <?php endforeach; ?>
              </select>
            </div>
            <button type="submit" class="btn btn-primary">Show</button>
          </form>
        </div>
        <div>
          <form method="get" class="d-flex align-items-end">
            <div class="me-2 flex-grow-1">
              <label for="state" class="form-label">Or choose State</label>
              <select id="state" name="state" class="form-select" style="max-width: 250px;">
                <option value="">-- select state --</option>
                <?php foreach ($states as $st): ?>
                  <option value="<?= h($st) ?>" <?= ($st === $selected_state) ? 'selected' : '' ?>><?= h($st) ?></option>
                <?php endforeach; ?>
              </select>
            </div>
            <button type="submit" class="btn btn-primary">Show</button>
          </form>
        </div>
        <?php if ($current_time_str): ?>
          <div class="mt-3">
            <div class="alert alert-secondary mb-0 current-time-alert">
              <strong>Current time</strong>
              <?php if ($display_abbr): ?> (<?= h($display_abbr) ?>) <?php endif; ?>
              <?php if ($selected_tz): ?> in <?= h($selected_tz) ?> <?php endif; ?>: <span class="fw-bold"><?= h($current_time_str) ?></span>
              <?php if ($selected_state): ?> — State: <?= h($selected_state) ?><?php endif; ?>
            </div>
          </div>
        <?php endif; ?>
      </div>
    </div>
  </div>
</div>
<?php include __DIR__ . '/inc/footer.php'; ?>

← Back to Directory Edit File 🔒 Chmod

WP File Manager