DST Date Format 1970
April 1, 2025 · AI Conversations
### Sample DST Date Formats for New York (Eastern Daylight Time – EDT):
Here’s how a date during DST in New York (e.g., **July 4, 1970**) could look in various formats:
| Format Style | Sample Output |
|————–|—————————————-|
| ISO 8601 | `1970-07-04T14:30:00-04:00` |
| RFC 2822 | `Sat, 04 Jul 1970 14:30:00 -0400` |
| US Format | `07/04/1970 2:30 PM EDT` |
| Unix Timestamp | `16380` (example: for 1970-07-04 00:00:00 EDT) |
| PHP date() | `Saturday, July 4th, 1970 @ 2:30pm EDT`|
Let me know if you want this in a specific programming language or library format (like Python, PHP, JavaScript, etc).
$timezone = $timezoneArray[0];
countrty code UK time zone not returned
In PHP's `DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode)`, the **country code must be a 2-letter ISO 3166-1 alpha-2 country code**, and for the **United Kingdom**, the correct code is:
GB
### Fix:
Replace `'UK'` with `'GB'` in your code:
$countryCode = 'GB'; // Correct ISO code for United Kingdom
$timezoneArray = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode);
if (!empty($timezoneArray)) {
$timezone = $timezoneArray[0];
echo "Timezone: $timezone";
} else {
echo "No timezone found for country code $countryCode";
}
### Example Output:
Timezone: Europe/London
Let me know if you're trying to fetch this dynamically or need a fallback for countries with multiple timezones.
$d = strtotime(str_replace('/','-',$dob).' '.$timebirth. ','.$timezone);
$dst = (int)date('I', $d);
date_default_timezone_set($timezone);
—
### ⚠️ **Key Issues:**
1. **Historical timezone data limitation**:
– `strtotime()` does **not consider time zone context** — it parses time *as if in the current default timezone*, unless you use a proper `DateTime` object with a `DateTimeZone`.
2. **PHP's `date('I')` only works with system timezones and defaults**.
– It doesn’t account for historical DST unless you explicitly create a `DateTime` object in the correct timezone and date.
—
### ✅ **Correct Way to Check DST in Historical Context:**
Use `DateTime` and `DateTimeZone`:
$dob = '17/7/1949';
$timebirth = '11:43 am';
$timezone = 'America/New_York'; // or 'Europe/London'
$datetimeString = str_replace('/', '-', $dob) . ' ' . $timebirth;
$dt = new DateTime($datetimeString, new DateTimeZone($timezone));
$dst = (int) $dt->format('I'); // 1 if DST, 0 if not
echo "DST: $dstn"; // should return 1 for New York on 17 July 1949
echo "Timezone Abbreviation: " . $dt->format('T'); // should show EDT
echo "nLocal Time: " . $dt->format('Y-m-d H:i:s');
—
### 🕐 Output for New York on 17 July 1949:
– `DST: 1` ✅
– `Timezone Abbreviation: EDT`
– `Local Time: 1949-07-17 11:43:00`
—
### 💡 Notes:
– New York **was** on **EDT (UTC-4)** during that period in 1949.
– UK time (`Europe/London`) was **not** on DST on **that same date** in 1949 — you'd get `DST: 0` for that.
—
Let me know if you'd like to convert between these two timezones for that date/time too!
Europe/London
Even though **York** is a city in the UK, PHP doesn’t list timezones by city for every place. It uses regional representations like `Europe/London` for all UK locations.
—
### ✅ Checking DST for York, UK (17 July 1949, 11:43 AM):
$dob = '17/7/1949';
$timebirth = '11:43 am';
$timezone = 'Europe/London'; // York, UK
$datetimeString = str_replace('/', '-', $dob) . ' ' . $timebirth;
$dt = new DateTime($datetimeString, new DateTimeZone($timezone));
$dst = (int) $dt->format('I'); // 1 = DST, 0 = not DST
echo "DST: $dstn";
echo "Timezone Abbreviation: " . $dt->format('T') . "n";
echo "Local Time: " . $dt->format('Y-m-d H:i:s');
—
### 🧠 Historical Note:
In **1949**, the UK **did observe DST**, and on **17 July 1949**, DST **was active**. You should get:
– `DST: 1`
– `Timezone Abbreviation: BST` (British Summer Time)
– `Local Time: 1949-07-17 11:43:00`
—
Let me know if you want to compare this time with New York’s time at the same moment — I can show you how to convert that as well.
$city_id = $_POST['city_id'];
$country_id = $_POST['country_id'];
$firstname = $_POST['firstname'];
$dob = $_POST['dob'];
$tob_h = $_POST['tob_h'];
$tob_m = $_POST['tob_m'];
$gender = $_POST['gender'];
$query = "SELECT abbr FROM `{$wpdb->prefix}doug_countries` WHERE id=".(int)$country_id;
$query = $wpdb->prepare($query);
$countryCode = $wpdb->get_var($query);
$timezoneArray = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode);
$timezone = $timezoneArray[0];
if($tob_h == 00){
$timebirth = '12'.':'.$tob_m.':00';
} else {
$timebirth = $tob_h.':'.$tob_m.':00';
}
$d = strtotime(str_replace('/','-',$dob).' '.$timebirth. ','.$timezone);
$dst = (int)date('I', $d);
date_default_timezone_set($timezone);
Update above code
– `strtotime()` doesn’t handle historical timezones or DST accurately with the timezone string attached at the end.
– You should use `DateTime` and `DateTimeZone` for **reliable DST detection**.
– You don’t need to call `date_default_timezone_set()` if you're already using `DateTimeZone` correctly.
– `$wpdb->prepare()` is misused — it's not needed if you're not passing values dynamically into the query.
—
### ✅ Here's the **updated and corrected version** of your code:
check_ajax_referer('doug_ajax_nonce', 'nonce');
$city_id = $_POST['city_id'];
$country_id = (int) $_POST['country_id'];
$firstname = sanitize_text_field($_POST['firstname']);
$dob = sanitize_text_field($_POST['dob']); // Format: dd/mm/yyyy
$tob_h = str_pad((int) $_POST['tob_h'], 2, '0', STR_PAD_LEFT);
$tob_m = str_pad((int) $_POST['tob_m'], 2, '0', STR_PAD_LEFT);
$gender = sanitize_text_field($_POST['gender']);
// Get the ISO country code from your custom table
$countryCode = $wpdb->get_var(
$wpdb->prepare("SELECT abbr FROM `{$wpdb->prefix}doug_countries` WHERE id = %d", $country_id)
);
// Get timezones for the country
$timezoneArray = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode);
$timezone = $timezoneArray[0] ?? 'UTC'; // fallback in case no timezone is found
// Handle time input, including midnight case
$timebirth = ($tob_h == '00') ? '12' . ':' . $tob_m . ':00' : $tob_h . ':' . $tob_m . ':00';
// Convert date to format suitable for DateTime
$datetimeString = str_replace('/', '-', $dob) . ' ' . $timebirth;
try {
$dt = new DateTime($datetimeString, new DateTimeZone($timezone));
$dst = (int) $dt->format('I'); // 1 if DST, 0 if not
$localTime = $dt->format('Y-m-d H:i:s');
$tzAbbr = $dt->format('T');
// Example return
wp_send_json_success([
'dst' => $dst,
'timezone' => $timezone,
'abbr' => $tzAbbr,
'local_time' => $localTime,
]);
} catch (Exception $e) {
wp_send_json_error(['message' => 'Invalid date or timezone: ' . $e->getMessage()]);
}
—
### 📝 What This Fixes:
– Uses `DateTime` and `DateTimeZone` (required for accurate historical DST checks).
– Prevents misuse of `strtotime()`.
– Sanitizes and pads time inputs to ensure valid format.
– Uses proper `$wpdb->prepare()` syntax.
– Fallback to `UTC` if timezone is missing.
—
Let me know if you want to convert this time between two countries (e.g., UK to New York), or also save this to the database.
—
### ✅ jQuery `$.ajax()` Example:
$.ajax({
url: ajaxurl, // or your custom URL endpoint
type: 'POST',
dataType: 'json',
data: {
action: 'your_custom_action', // matches your WordPress add_action
nonce: doug_ajax_nonce, // your localized nonce
city_id: $('#city_id').val(),
country_id: $('#country_id').val(),
firstname: $('#firstname').val(),
dob: $('#dob').val(),
tob_h: $('#tob_h').val(),
tob_m: $('#tob_m').val(),
gender: $('input[name="gender"]:checked').val()
},
success: function(response) {
if (response.success) {
console.log('DST:', response.data.dst);
console.log('Local Time:', response.data.local_time);
console.log('Timezone:', response.data.timezone);
} else {
console.error('Server error:', response.data.message || 'Unknown error');
}
},
error: function(xhr, status, error) {
console.error('AJAX Error:', status, error);
console.log('Full response:', xhr.responseText);
}
});
—
### 🧠 Make sure:
– `ajaxurl` and `doug_ajax_nonce` are defined via `wp_localize_script()` or equivalent in your theme/plugin.
– `action: 'your_custom_action'` matches your PHP handler like:
add_action('wp_ajax_your_custom_action', 'your_php_function_name');
Let me know if you want this wrapped in a form submit handler or inside a button click.