include_once('wp-content/search-includes/config.php');
include_once('wp-content/search-includes/admin_functions.php');
include_once('wp-content/search-includes/Validate.php');
// ---------------------------------------------------------------------------
// IANA timezone map — same as meeting-search-virtual-dev.php
// ---------------------------------------------------------------------------
function getMeetingIanaMap(): array {
return [
'ACDT' => 'Australia/Adelaide', 'ACST' => 'Australia/Darwin',
'ACWT' => 'Australia/Eucla', 'ADT' => 'America/Halifax',
'ACT' => 'America/Rio_Branco', 'AEDT' => 'Australia/Sydney',
'AEST' => 'Australia/Brisbane', 'AFT' => 'Asia/Kabul',
'AKDT' => 'America/Anchorage', 'AKST' => 'America/Anchorage',
'ALMT' => 'Asia/Almaty', 'AMT' => 'Asia/Yerevan',
'AMST' => 'America/Manaus', 'ANAT' => 'Asia/Anadyr',
'ANAST' => 'Asia/Anadyr', 'AQTT' => 'Asia/Aqtobe',
'ART' => 'America/Argentina/Buenos_Aires',
'AST' => 'America/Halifax', 'AWDT' => 'Australia/Perth',
'AWST' => 'Australia/Perth', 'AZOT' => 'Atlantic/Azores',
'AZOST' => 'Atlantic/Azores', 'AZT' => 'Asia/Baku',
'AZST' => 'Asia/Baku', 'BNT' => 'Asia/Brunei',
'BDT' => 'Asia/Dhaka', 'BOT' => 'America/La_Paz',
'BRT' => 'America/Sao_Paulo', 'BST' => 'Europe/London',
'BTT' => 'Asia/Thimphu', 'BT' => 'Europe/London',
'BGT' => 'Europe/Berlin', 'CAST' => 'Antarctica/Casey',
'CAT' => 'Africa/Harare', 'CCT' => 'Indian/Cocos',
'CEDT' => 'Europe/Paris', 'CEST' => 'Europe/Paris',
'CET' => 'Europe/Belgrade', 'CHADT' => 'Pacific/Chatham',
'CHAST' => 'Pacific/Chatham', 'CHOT' => 'Asia/Choibalsan',
'CHOST' => 'Asia/Choibalsan', 'CHsT' => 'Pacific/Guam',
'CHUT' => 'Pacific/Truk', 'CIT' => 'Asia/Makassar',
'CKT' => 'Pacific/Rarotonga', 'CLST' => 'America/Santiago',
'CLT' => 'America/Santiago', 'COT' => 'America/Bogota',
'CST' => 'America/Chicago', 'CT' => 'America/Chicago',
'CVT' => 'Atlantic/Cape_Verde', 'CWST' => 'Australia/Eucla',
'CXT' => 'Indian/Christmas', 'DAVT' => 'Antarctica/Davis',
'DDUT' => 'Antarctica/DumontDUrville',
'EASST' => 'Pacific/Easter', 'EAST' => 'Pacific/Easter',
'EAT' => 'Africa/Nairobi', 'ECT' => 'America/Guayaquil',
'EDT' => 'America/New_York', 'EEDT' => 'Europe/Helsinki',
'EEST' => 'Europe/Helsinki', 'EET' => 'Europe/Helsinki',
'EGT' => 'America/Scoresbysund', 'EGST' => 'America/Scoresbysund',
'EST' => 'America/New_York', 'ET' => 'America/New_York',
'EIT' => 'Asia/Jayapura', 'FET' => 'Europe/Minsk',
'FJT' => 'Pacific/Fiji', 'FJST' => 'Pacific/Fiji',
'FKST' => 'Atlantic/Stanley', 'FKT' => 'Atlantic/Stanley',
'FNT' => 'America/Noronha', 'GALT' => 'Pacific/Galapagos',
'GAMT' => 'Pacific/Gambier', 'GET' => 'Asia/Tbilisi',
'GFT' => 'America/Cayenne', 'GILT' => 'Pacific/Tarawa',
'GMT' => 'Etc/GMT', 'GST' => 'Asia/Dubai',
'GYT' => 'America/Guyana', 'HADT' => 'America/Adak',
'HAST' => 'America/Adak', 'HKT' => 'Asia/Hong_Kong',
'HOVT' => 'Asia/Hovd', 'HOVST' => 'Asia/Hovd',
'HST' => 'Pacific/Honolulu', 'ICT' => 'Asia/Bangkok',
'IDT' => 'Asia/Jerusalem', 'IOT' => 'Indian/Chagos',
'IRDT' => 'Asia/Tehran', 'IRKT' => 'Asia/Irkutsk',
'IRKST' => 'Asia/Irkutsk', 'IRST' => 'Asia/Tehran',
'IST' => 'Asia/Kolkata', 'IST2' => 'Europe/Dublin',
'JST' => 'Asia/Tokyo', 'KGT' => 'Asia/Bishkek',
'KOST' => 'Pacific/Kosrae', 'KRAT' => 'Asia/Krasnoyarsk',
'KRAST' => 'Asia/Krasnoyarsk', 'KST' => 'Asia/Seoul',
'KUYT' => 'Europe/Samara', 'LHDT' => 'Australia/Lord_Howe',
'LHST' => 'Australia/Lord_Howe', 'LINT' => 'Pacific/Kiritimati',
'LT' => 'Europe/London', 'MAGT' => 'Asia/Magadan',
'MAGST' => 'Asia/Magadan', 'MART' => 'Pacific/Marquesas',
'MAWT' => 'Antarctica/Mawson', 'MDT' => 'America/Denver',
'MeST' => 'America/Metlakatla', 'MHT' => 'Pacific/Majuro',
'MIST' => 'Antarctica/Macquarie', 'MMT' => 'Asia/Rangoon',
'MSD' => 'Europe/Moscow', 'MSK' => 'Europe/Moscow',
'MST' => 'America/Phoenix', 'MT' => 'America/Denver',
'MUT' => 'Indian/Mauritius', 'MVT' => 'Indian/Maldives',
'MYT' => 'Asia/Kuala_Lumpur', 'NCT' => 'Pacific/Noumea',
'NDT' => 'America/St_Johns', 'NFT' => 'Pacific/Norfolk',
'NOVT' => 'Asia/Novosibirsk', 'NOVST' => 'Asia/Novosibirsk',
'NPT' => 'Asia/Kathmandu', 'NRT' => 'Pacific/Nauru',
'NST' => 'America/St_Johns', 'NT' => 'America/St_Johns',
'NUT' => 'Pacific/Niue', 'NZT' => 'Pacific/Auckland',
'NZST' => 'Pacific/Auckland', 'OMST' => 'Asia/Omsk',
'OMSST' => 'Asia/Omsk', 'ORAT' => 'Asia/Oral',
'PDT' => 'America/Los_Angeles', 'PET' => 'America/Lima',
'PETT' => 'Asia/Kamchatka', 'PETST' => 'Asia/Kamchatka',
'PGT' => 'Pacific/Port_Moresby', 'PHT' => 'Asia/Manila',
'PHOT' => 'Pacific/Enderbury', 'PKT' => 'Asia/Karachi',
'PMDT' => 'America/Miquelon', 'PMST' => 'America/Miquelon',
'PONT' => 'Pacific/Pohnpei', 'PORT' => 'Europe/Lisbon',
'PST' => 'America/Los_Angeles', 'PT' => 'America/Los_Angeles',
'PWT' => 'Pacific/Palau', 'PYT' => 'America/Asuncion',
'PYST' => 'America/Asuncion', 'QYZT' => 'Asia/Qyzylorda',
'RET' => 'Indian/Reunion', 'ROTT' => 'Antarctica/Rothera',
'SAKT' => 'Asia/Sakhalin', 'SAMT' => 'Europe/Samara',
'SAST' => 'Africa/Johannesburg', 'SBT' => 'Pacific/Guadalcanal',
'SCT' => 'Indian/Mahe', 'SGT' => 'Asia/Singapore',
'SLT' => 'Asia/Colombo', 'SLST' => 'Asia/Colombo',
'SRT' => 'America/Paramaribo', 'SRET' => 'Asia/Srednekolymsk',
'SST' => 'Pacific/Pago_Pago', 'SYOT' => 'Antarctica/Syowa',
'TAHT' => 'Pacific/Tahiti', 'TFT' => 'Indian/Kerguelen',
'TJT' => 'Asia/Dushanbe', 'TKT' => 'Pacific/Fakaofo',
'TLT' => 'Asia/Dili', 'TMT' => 'Asia/Ashgabat',
'TOT' => 'Pacific/Tongatapu', 'TRT' => 'Europe/Istanbul',
'TRUT' => 'Pacific/Truk', 'TVT' => 'Pacific/Funafuti',
'ULAT' => 'Asia/Ulaanbaatar', 'ULAST' => 'Asia/Ulaanbaatar',
'UTC' => 'UTC', 'UYST' => 'America/Montevideo',
'UYT' => 'America/Montevideo', 'UZT' => 'Asia/Tashkent',
'VET' => 'America/Caracas', 'VLAT' => 'Asia/Vladivostok',
'VLAST' => 'Asia/Vladivostok', 'VOLT' => 'Europe/Volgograd',
'VUT' => 'Pacific/Efate', 'WAKT' => 'Pacific/Wake',
'WAT' => 'Africa/Lagos', 'WAST' => 'Africa/Windhoek',
'WDT' => 'Australia/Perth', 'WEDT' => 'Europe/Lisbon',
'WEST' => 'Europe/Lisbon', 'WET' => 'Europe/Lisbon',
'WFT' => 'Pacific/Wallis', 'WGT' => 'America/Godthab',
'WGST' => 'America/Godthab', 'WIB' => 'Asia/Jakarta',
'WIT' => 'Asia/Jayapura', 'WITA' => 'Asia/Makassar',
'WST' => 'Australia/Perth', 'WT' => 'Africa/Monrovia',
'YAKT' => 'Asia/Yakutsk', 'YAKST' => 'Asia/Yakutsk',
'YAP' => 'Pacific/Truk', 'YEKT' => 'Asia/Yekaterinburg',
'YEKST' => 'Asia/Yekaterinburg',
];
}
// ---------------------------------------------------------------------------
// Convert a meeting time (meeting-local tz) to the user's timezone.
// Returns [userDayName, userTime H:i:s, userDayNum, localDayName, dayShifted Y/N]
// ---------------------------------------------------------------------------
function convertToUserTime(
string $meetingDay,
string $meetingTime,
string $meetingTzCode,
DateTimeZone $userTz
): array {
static $ianaMap = null;
if ($ianaMap === null) {
$ianaMap = getMeetingIanaMap();
}
$dayNames = [
1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday',
5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday',
];
$ianaName = $ianaMap[$meetingTzCode] ?? 'UTC';
$meetingTz = new DateTimeZone($ianaName);
$dt = new DateTime($meetingDay . ' ' . $meetingTime, $meetingTz);
$origDayNum = (int) $dt->format('N');
$dt->setTimezone($userTz);
$userDayNum = (int) $dt->format('N');
return [
0 => $dayNames[$userDayNum],
1 => $dt->format('H:i:s'),
2 => $userDayNum,
3 => $dayNames[$origDayNum],
4 => ($userDayNum !== $origDayNum) ? 'Y' : 'N',
];
}
// ---------------------------------------------------------------------------
// Given a user-local weekday name and time (H:i:s), return the next DateTime
// on or after $now when that meeting occurs. If the slot already passed this
// week, returns the occurrence next week.
// ---------------------------------------------------------------------------
function nextOccurrence(string $dayName, string $timeStr, DateTime $now): DateTime {
$dayNums = ['Monday'=>1,'Tuesday'=>2,'Wednesday'=>3,'Thursday'=>4,
'Friday'=>5,'Saturday'=>6,'Sunday'=>7];
$targetNum = $dayNums[$dayName] ?? 1;
$todayNum = (int) $now->format('N');
$diff = ($targetNum - $todayNum + 7) % 7;
[$h, $i, $s] = array_pad(explode(':', $timeStr), 3, '00');
$dt = clone $now;
if ($diff > 0) {
$dt->modify("+{$diff} days");
}
$dt->setTime((int)$h, (int)$i, (int)$s);
// If this slot has already passed today, jump to next week
if ($dt < $now) {
$dt->modify('+7 days');
}
return $dt;
}
// ---------------------------------------------------------------------------
// First-visit: browser hasn't told us the IANA timezone yet.
// Output a lightweight redirect page before any WordPress theme HTML fires.
// ---------------------------------------------------------------------------
$userTzName = clean_request($_GET, 'mytimezone', 'basic', 100);
if ($userTzName === '') {
$baseUrl = 'https://' . $_SERVER['HTTP_HOST']
. strtok($_SERVER['REQUEST_URI'], '?')
. '?mytimezone=';
?>
Detecting timezone…
Detecting your timezone — if this page does not redirect within 5 seconds,
click here .
modify('+24 hours');
// Normal page load from here on.
get_header();
?>
where('status', 'Active');
$rawData = $db->get('groups_live g', null, $cols);
// ---------------------------------------------------------------------------
// For each meeting row, determine venue fields, convert times, find next
// occurrence, and keep those that fall within the 24-hour window.
// Multi-day meetings generate one entry per qualifying day.
// ---------------------------------------------------------------------------
$results = [];
foreach ($rawData as $row) {
$startTime = null;
$endTime = null;
$tzCode = null;
$daysStr = '';
$venueLabel = '';
$originates = '';
switch ($row['primary_venue']) {
case 'Video':
$startTime = $row['vid_start_time'] ?? null;
$endTime = $row['vid_end_time'] ?? null;
$tzCode = $row['vid_time_zone'] ?? null;
$daysStr = $row['vid_meeting_day'] ?? '';
$venueLabel = 'Video';
$originates = trim(($row['vid_host_location'] ?? '') . ' ' . ($row['vid_host_country'] ?? ''));
break;
case 'Phone':
$startTime = $row['phone_start_time'] ?? null;
$endTime = $row['phone_end_time'] ?? null;
$tzCode = $row['phone_time_zone'] ?? null;
$daysStr = $row['phone_meeting_day'] ?? '';
$venueLabel = 'Phone';
$originates = trim(($row['phone_host_location'] ?? '') . ' ' . ($row['phone_host_country'] ?? ''));
break;
case 'Email':
if (($row['email_specifictime'] ?? '') === 'no') continue 2;
$startTime = $row['email_start_time'] ?? null;
$endTime = $row['email_end_time'] ?? null;
$tzCode = $row['email_time_zone'] ?? null;
$daysStr = $row['email_meeting_day'] ?? '';
$venueLabel = 'Email/Chat';
break;
case 'F2F':
$startTime = $row['f2f_start_time'] ?? null;
$endTime = $row['f2f_end_time'] ?? null;
$tzCode = $row['master_time_zone'] ?? null; // F2F uses master tz
$daysStr = $row['f2f_meeting_day'] ?? '';
$venueLabel = 'Face-to-face';
$originates = trim(($row['f2f_city'] ?? '') . ' ' . ($row['f2f_state'] ?? ''));
break;
default:
continue 2;
}
if (!$startTime || !$endTime || !$tzCode || $daysStr === '') continue;
$days = array_filter(array_map('trim', explode(',', $daysStr)));
if (empty($days)) continue;
foreach ($days as $meetingDay) {
$convStart = convertToUserTime($meetingDay, $startTime, $tzCode, $userTz);
$convEnd = convertToUserTime($meetingDay, $endTime, $tzCode, $userTz);
$userDayName = $convStart[0];
$userTimeStr = $convStart[1];
$localDay = $convStart[3]; // meeting-local day name
$dayShifted = $convStart[4];
$nextOcc = nextOccurrence($userDayName, $userTimeStr, $nowUser);
// Skip if outside the 24-hour window
if ($nextOcc > $cutoffUser) continue;
$results[] = [
'next_occ' => $nextOcc,
'user_day' => $userDayName,
'user_start' => $userTimeStr,
'user_end' => $convEnd[1],
'local_day' => $localDay,
'local_start' => $startTime,
'local_end' => $endTime,
'tz_code' => $tzCode,
'day_shifted' => $dayShifted,
'venue_label' => $venueLabel,
'originates' => $originates,
'row' => $row,
];
}
}
// Sort by next occurrence ascending (soonest first)
usort($results, fn($a, $b) => $a['next_occ'] <=> $b['next_occ']);
// Pre-load timezone descriptions for all tz codes we actually use
$allTzCodes = array_unique(array_filter(array_column($results, 'tz_code')));
$tzDescMap = [];
if (!empty($allTzCodes)) {
$db->where('tz_code', $allTzCodes, 'IN');
foreach ($db->get('timezones_wshift') as $tzRow) {
$tzDescMap[$tzRow['tz_code']] = $tzRow['tz_description'];
}
}
?>
Meetings Starting in the Next 24 Hours
Your timezone:
Window:
format('l, F j g:i a'); ?>
→
format('l, F j g:i a'); ?>
↻ Refresh
meeting(s) found.
Slide results side-to-side to see all columns.
Starts
Meeting (Group #)
Venue
Local time & Originates
getTimestamp() - $nowUser->getTimestamp()) / 60);
if ($minutesAway < 60) {
$startsIn = $minutesAway . ' min';
} else {
$h = (int)($minutesAway / 60);
$m = $minutesAway % 60;
$startsIn = $h . 'h' . ($m > 0 ? ' ' . $m . 'm' : '');
}
$typesArray = explode(',', $row['meeting_venue']);
$isHybrid = ($row['venue_hybrid_dual'] === 'Hybrid');
$isDual = ($row['venue_hybrid_dual'] === 'Dual');
$parms = '?mid=' . $row['master_id']
. '&mytz=Y'
. '&mytimezone=' . urlencode($userTzName)
. '&usemytime=1'
. '&sid=' . session_id()
. '&searchType=Virtual'
. '&mv=' . urlencode($row['primary_venue']);
// Resolve originates country name
$originates = $result['originates'];
if ($row['primary_venue'] === 'Video' && $row['vid_host_country'] !== '') {
$db->where('iso3', $row['vid_host_country']);
foreach ($db->get('country') as $cr) { $originates = trim(($row['vid_host_location'] ?? '') . ', ' . $cr['name']); }
} elseif ($row['primary_venue'] === 'Phone' && $row['phone_host_country'] !== '') {
$db->where('iso3', $row['phone_host_country']);
foreach ($db->get('country') as $cr) { $originates = trim(($row['phone_host_location'] ?? '') . ', ' . $cr['name']); }
} elseif ($row['primary_venue'] === 'F2F' && $row['f2f_country'] !== '') {
$db->where('iso3', $row['f2f_country']);
foreach ($db->get('country') as $cr) {
$parts = array_filter([$row['f2f_city'], $row['f2f_state'], $cr['name']]);
$originates = implode(', ', $parts);
}
}
?>
format('g:i a'); ?>
in
( locally)
(
#)
Dual venue '; endif; ?>
Hybrid meeting '; endif; ?>
–
Skip to content
Events for April 17, 2026 - April 17, 2026
2026-04-17T00:00:00-04:00
July 2019
Mon
1
July 1, 2019 is the last date to submit Issues & Concerns for consideration at the 2019 World Service Conference in Los Angeles. To submit an Issue & Concern, please Download the Registration Packet Here
Sun
7
Sunday, July 7, 2019, from 2:00 - 3:30 p.m. Eastern Time, "A Spiritual Approach to Growing your Business: Members Share their Journeys in BDA," presented by the WSC Business Debtors Anonymous Committee [Flyer]
Sat
13
The Hospitals, Institutions, and Prisons (HIP) Committee of D.A. invites all members to celebrate!! INTERNATIONAL HIP AWARENESS DAY Saturday, July 13, 2019 Our Purpose is: To carry the message to those who cannot come to us and to raise awareness of outreach to Hospitals, Institutions and Prisons in Debtors Anonymous. Suggested Action Steps: Each
Sun
14
July 14, 2019 World Service Conference Registration Final Deadline for Delegates Hotel Reservation Deadline for Sleeping Rooms Fellowship Day Lunch and the Gala Dinner Registration Deadline for Guests 33rd Annual Debtors Anonymous World Service Conference in Los Angeles! Wednesday, August 7, through Sunday, August 11, 2019 Hilton Los Angeles Airport 5711 West Century Blvd. Los
Sun
14
Save the Date! Fellowship-wide Call on Traditions 10-12 Call-in: 1-605-472-5540, Access code: 617093 For International and Online Access, visit: www.debtorsanonymous.org/call-in-access For recordings of Fellowship-wide calls (when made available), visit: www.debtorsanonymous.org/podcasts
Sun
21
Fellowship-wide Call for Delegates to the 2019 World Service Conference in Los Angeles: July 21 1pm Eastern — pre-Conference Orientation Call-in: 1-605-472-5540, Access code: 617093 For International and Online Access, visit: www.debtorsanonymous.org/call-in-access For recordings of Fellowship-wide calls (when made available), visit: www.debtorsanonymous.org/podcasts
August 2019
Wed
7
Registration is open for the 33rd Annual Debtors Anonymous World Service Conference in Los Angeles! “Spotlight on Service” Wednesday, August 7, through Sunday, August 11, 2019 Hilton Los Angeles Airport 5711 West Century Blvd. Los Angeles, CA 90045 USA Download the Registration Packet Here Contribute to the John H. Scholarship Fund The annual World Service
Sat
10
All D.A. Members and their guests can register to attend: D.A. Fellowship Day Saturday August 10, 2019 Hilton Los Angeles Airport 5711 West Century Blvd. Los Angeles, CA 90045 USA Fellowship Day includes all-day workshops, a Luncheon w/Speaker, and the Gala Dinner w/Keynote, Talent Show, and Dance. For more information, see the Registration Packet at
Sat
10
The 2019 Fellowship Day during the World Service Conference will broadcast the following Twelve Steps sessions by conference call: 4:30 - 5:15 p.m. ET — Steps 1-3 5:30 - 6:15 p.m. ET — Steps 4-7 6:30 - 7:15 p.m. ET — Steps 8-10 7:30 - 8:15 p.m. ET — Steps 11 & 12 Call-in: 1-605-472-5540,
October 2019
Sun
13
October 13 @ 2:00 pm - 3:30 pm EDT Fellowship-wide calls with live speaker shares use the U.S. call-in phone number: 1-605-472-5540, access code: 617093#. International phone numbers (and online access) are available at www.debtorsanonymous.org/call-in-access.
The Calendar of Events shows information about events related to world service in Debtors Anonymous, such as Fellowship-wide Calls and the annual World Service Conference. For event flyers, please visit:
https://debtorsanonymous.org/announcements
Information on regional events is available through the links to Regional Intergroup websites which can be found here: Find a Regional DA Intergroup
The General Service Board (GSB) and the General Service Office (GSO) of Debtors Anonymous provide this link to facilitate information about local D.A. activities. Our link to this or any other site, other than the D.A. website, debtorsanonymous.org, does not constitute or indicate any review, endorsement, or approval by the D.A. GSB, D.A. GSO, nor any entity within the D.A. community.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec auctor eros, sed suscipit eros. Nulla porttitor nisi ac hendrerit finibus. Duis dapibus lacus sit amet porttitor porta. Nulla facilisi.
Sign-up to get the latest news and update information. Don't worry, we won't send spam!
[contact-form-7 id="3145" title="Sliding Bar Form"]
Page load link