{"id":2296,"date":"2026-08-27T15:34:20","date_gmt":"2026-08-27T07:34:20","guid":{"rendered":"https:\/\/gis.com.my\/training\/?page_id=2296"},"modified":"2026-08-28T11:28:28","modified_gmt":"2026-08-28T03:28:28","slug":"upcomingtraining","status":"publish","type":"page","link":"https:\/\/gis.com.my\/training\/upcomingtraining\/","title":{"rendered":"Schedule"},"content":{"rendered":"\n<style>\n  .training-container {\n    max-width: 900px;\n    margin: 0 auto;\n    padding: 40px 20px;\n  }\n  \n  .training-header {\n    text-align: center;\n    margin-bottom: 50px;\n  }\n  \n  .training-header h1 {\n    font-size: 36px;\n    font-weight: 700;\n    color: #000000;\n    margin-bottom: 10px;\n  }\n  \n  .training-header p {\n    font-size: 16px;\n    color: #7f8c8d;\n  }\n  \n  .training-list {\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n  }\n  \n  .training-item {\n    display: grid;\n    grid-template-columns: 120px 1fr auto;\n    gap: 20px;\n    align-items: center;\n    background: #ffffff;\n    border: 1px solid #e8e8e8;\n    border-radius: 12px;\n    padding: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n    transition: all 0.3s ease;\n  }\n  \n  .training-item:hover {\n    box-shadow: 0 6px 16px rgba(0,0,0,0.12);\n    transform: translateY(-2px);\n  }\n  \n  .training-date-box {\n    background: #1d64c2;\n    color: white;\n    border-radius: 10px;\n    padding: 15px;\n    text-align: center;\n    min-width: 100px;\n  }\n  \n  .date-day {\n    font-size: 36px;\n    font-weight: 700;\n    line-height: 1;\n    margin-bottom: 5px;\n  }\n  \n  .date-month {\n    font-size: 14px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  \n  .training-info {\n    flex: 1;\n  }\n  \n  .training-title {\n    font-size: 20px;\n    font-weight: 700;\n    color: #000000;\n    margin-bottom: 10px;\n  }\n  \n  .training-meta {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 15px;\n    font-size: 14px;\n    color: #666;\n    margin-bottom: 10px;\n  }\n  \n  .training-meta-item {\n    display: flex;\n    align-items: center;\n    gap: 5px;\n  }\n  \n  .training-meta-item::before {\n    font-size: 16px;\n  }\n  \n  .meta-time::before { content: '\ud83d\udd50'; }\n  .meta-duration::before { content: '\u23f1\ufe0f'; }\n  .meta-location::before { content: '\ud83d\udccd'; }\n  \n  .training-description {\n    font-size: 14px;\n    color: #666;\n    line-height: 1.6;\n    margin-top: 8px;\n  }\n  \n  .training-action {\n    display: flex;\n    align-items: center;\n  }\n  \n  .register-btn {\n    background: #1d64c2;\n    color: white;\n    padding: 12px 30px;\n    border: none;\n    border-radius: 8px;\n    cursor: pointer;\n    font-size: 15px;\n    font-weight: 600;\n    transition: all 0.3s ease;\n    text-decoration: none;\n    display: inline-block;\n    white-space: nowrap;\n    box-shadow: 0 4px 12px rgba(29, 100, 194, 0.3);\n  }\n  \n  .register-btn:hover {\n    background: #4f8bdc;\n    color: #000000;\n    transform: translateY(-2px);\n    box-shadow: 0 6px 16px rgba(79, 139, 220, 0.4);\n  }\n  \n  .no-training {\n    text-align: center;\n    padding: 60px 20px;\n    color: #95a5a6;\n    font-size: 18px;\n    background: #f8f9fa;\n    border-radius: 12px;\n  }\n  \n  .loading {\n    text-align: center;\n    padding: 60px 20px;\n    color: #3498db;\n    font-size: 18px;\n  }\n  \n  @media (max-width: 768px) {\n    .training-item {\n      grid-template-columns: 1fr;\n      text-align: center;\n    }\n    \n    .training-date-box {\n      margin: 0 auto;\n    }\n    \n    .training-meta {\n      justify-content: center;\n    }\n    \n    .training-action {\n      justify-content: center;\n    }\n    \n    .register-btn {\n      width: 100%;\n    }\n  }\n<\/style>\n\n<div class=\"training-container\">\n  <div class=\"training-header\">\n    <h1>Upcoming Training Sessions<\/h1>\n    <p>Enhance your skills with our professional training programs<\/p>\n  <\/div>\n  <div class=\"training-list\" id=\"trainingList\">\n    <div class=\"loading\">\ud83d\udcda Loading training sessions&#8230;<\/div>\n  <\/div>\n<\/div>\n\n<!-- Include SheetJS library to read Excel files -->\n<script src=\"https:\/\/cdn.sheetjs.com\/xlsx-0.20.1\/package\/dist\/xlsx.full.min.js\"><\/script>\n\n<script>\n  \/\/ ========================================\n  \/\/ CONFIGURATION - UPDATE THIS URL\n  \/\/ ========================================\n  \/\/ After uploading your Excel file to WordPress Media, paste the URL here\n  const EXCEL_FILE_URL = 'https:\/\/gis.com.my\/training\/wp-content\/uploads\/2026\/08\/Upcoming-Training-Sessions.xlsx';\n  \n  \/\/ ========================================\n  \/\/ DON'T EDIT BELOW THIS LINE\n  \/\/ ========================================\n  \n  function formatDate(dateString) {\n    const date = new Date(dateString);\n    const day = date.getDate();\n    const month = date.toLocaleDateString('en-US', { month: 'short' }).toUpperCase();\n    return { day, month };\n  }\n\n  function parseExcelDate(excelDate) {\n    \/\/ Handle Excel date serial numbers\n    if (typeof excelDate === 'number') {\n      const date = new Date((excelDate - 25569) * 86400 * 1000);\n      return date.toISOString().split('T')[0];\n    }\n    \/\/ Handle string dates\n    if (typeof excelDate === 'string') {\n      const date = new Date(excelDate);\n      if (!isNaN(date.getTime())) {\n        return date.toISOString().split('T')[0];\n      }\n    }\n    return excelDate;\n  }\n\n  async function loadTrainingsFromExcel() {\n    try {\n      const response = await fetch(EXCEL_FILE_URL);\n      const arrayBuffer = await response.arrayBuffer();\n      const workbook = XLSX.read(arrayBuffer, { type: 'array' });\n      \n      \/\/ Get first sheet\n      const firstSheet = workbook.Sheets[workbook.SheetNames[0]];\n      \n      \/\/ Convert to JSON\n      const data = XLSX.utils.sheet_to_json(firstSheet);\n      \n      \/\/ Map Excel columns to training object\n      const trainings = data.map(row => ({\n        title: row.Title || row.title || '',\n        date: parseExcelDate(row.Date || row.date),\n        time: row.Time || row.time || '',\n        duration: row.Duration || row.duration || '',\n        location: row.Location || row.location || '',\n        description: row.Description || row.description || '',\n        registrationLink: row.RegistrationLink || row['Registration Link'] || row.registrationLink || ''\n      }));\n      \n      renderTrainings(trainings);\n    } catch (error) {\n      console.error('Error loading Excel file:', error);\n      document.getElementById('trainingList').innerHTML = \n        '<div class=\"no-training\">\u26a0\ufe0f Error loading training sessions. Please check the Excel file URL.<\/div>';\n    }\n  }\n\n  function renderTrainings(trainings) {\n    const list = document.getElementById('trainingList');\n    const today = new Date();\n    today.setHours(0, 0, 0, 0);\n\n    const upcomingTrainings = trainings.filter(training => {\n      return new Date(training.date) >= today;\n    });\n\n    upcomingTrainings.sort((a, b) => new Date(a.date) - new Date(b.date));\n\n    if (upcomingTrainings.length === 0) {\n      list.innerHTML = '<div class=\"no-training\">\ud83d\udcda No upcoming training sessions at the moment. Check back soon!<\/div>';\n      return;\n    }\n\n    list.innerHTML = upcomingTrainings.map(training => {\n      const { day, month } = formatDate(training.date);\n      return `\n        <div class=\"training-item\">\n          <div class=\"training-date-box\">\n            <div class=\"date-day\">${day}<\/div>\n            <div class=\"date-month\">${month}<\/div>\n          <\/div>\n          <div class=\"training-info\">\n            <div class=\"training-title\">${training.title}<\/div>\n            <div class=\"training-meta\">\n              <div class=\"training-meta-item meta-time\">${training.time}<\/div>\n              <div class=\"training-meta-item meta-duration\">${training.duration}<\/div>\n              <div class=\"training-meta-item meta-location\">${training.location}<\/div>\n            <\/div>\n            <div class=\"training-description\">${training.description}<\/div>\n          <\/div>\n          <div class=\"training-action\">\n            <a href=\"${training.registrationLink}\" class=\"register-btn\">\n              Register Now\n            <\/a>\n          <\/div>\n        <\/div>\n      `;\n    }).join('');\n  }\n\n  \/\/ Load trainings when page loads\n  loadTrainingsFromExcel();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Upcoming Training Sessions Enhance your skills with our professional training programs \ud83d\udcda Loading training sessions&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","om_disable_all_campaigns":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":"","_links_to":"","_links_to_target":""},"class_list":["post-2296","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Schedule - GIS Malaysia | Training<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gis.com.my\/training\/upcomingtraining\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schedule - GIS Malaysia | Training\" \/>\n<meta property=\"og:description\" content=\"Upcoming Training Sessions Enhance your skills with our professional training programs \ud83d\udcda Loading training sessions&#8230;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gis.com.my\/training\/upcomingtraining\/\" \/>\n<meta property=\"og:site_name\" content=\"GIS Malaysia | Training\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T03:28:28+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gis.com.my\\\/training\\\/upcomingtraining\\\/\",\"url\":\"https:\\\/\\\/gis.com.my\\\/training\\\/upcomingtraining\\\/\",\"name\":\"Schedule - GIS Malaysia | Training\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gis.com.my\\\/training\\\/#website\"},\"datePublished\":\"2026-08-27T07:34:20+00:00\",\"dateModified\":\"2026-08-28T03:28:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gis.com.my\\\/training\\\/upcomingtraining\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gis.com.my\\\/training\\\/upcomingtraining\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gis.com.my\\\/training\\\/upcomingtraining\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gis.com.my\\\/training\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schedule\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gis.com.my\\\/training\\\/#website\",\"url\":\"https:\\\/\\\/gis.com.my\\\/training\\\/\",\"name\":\"GIS Malaysia | Training\",\"description\":\"GIS Innovation Training Website\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gis.com.my\\\/training\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Schedule - GIS Malaysia | Training","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gis.com.my\/training\/upcomingtraining\/","og_locale":"en_US","og_type":"article","og_title":"Schedule - GIS Malaysia | Training","og_description":"Upcoming Training Sessions Enhance your skills with our professional training programs \ud83d\udcda Loading training sessions&#8230;","og_url":"https:\/\/gis.com.my\/training\/upcomingtraining\/","og_site_name":"GIS Malaysia | Training","article_modified_time":"2026-08-28T03:28:28+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gis.com.my\/training\/upcomingtraining\/","url":"https:\/\/gis.com.my\/training\/upcomingtraining\/","name":"Schedule - GIS Malaysia | Training","isPartOf":{"@id":"https:\/\/gis.com.my\/training\/#website"},"datePublished":"2026-08-27T07:34:20+00:00","dateModified":"2026-08-28T03:28:28+00:00","breadcrumb":{"@id":"https:\/\/gis.com.my\/training\/upcomingtraining\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gis.com.my\/training\/upcomingtraining\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gis.com.my\/training\/upcomingtraining\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gis.com.my\/training\/"},{"@type":"ListItem","position":2,"name":"Schedule"}]},{"@type":"WebSite","@id":"https:\/\/gis.com.my\/training\/#website","url":"https:\/\/gis.com.my\/training\/","name":"GIS Malaysia | Training","description":"GIS Innovation Training Website","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gis.com.my\/training\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/pages\/2296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/comments?post=2296"}],"version-history":[{"count":5,"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/pages\/2296\/revisions"}],"predecessor-version":[{"id":2314,"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/pages\/2296\/revisions\/2314"}],"wp:attachment":[{"href":"https:\/\/gis.com.my\/training\/wp-json\/wp\/v2\/media?parent=2296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}