CINXE.COM
Singapore Calendar
<!doctype html> <html > <head id="ctl00_Head1"><meta charset="utf-8" /><title> Singapore Calendar </title><meta id="metaDesc" name="description" content="Trading Economics provides data for 20 million economic indicators from 196 countries including actual values, consensus figures, forecasts, historical time series and news. Singapore Calendar - was last updated on Monday, March 3, 2025." /><meta id="metaKeyword" name="keywords" content="Singapore Calendar, economic indicators, data, actual values, historical, time series, forecasts, news" /><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1" /><meta name="theme-color" content="#333333" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/css/bootstrap.min.css" integrity="sha512-SbiR/eusphKoMVVXysTKG/7VseWii+Y3FdHrt0EpKgpToZeemhqHeZeLWLhJutz/2ut2Vw1uQEj2MbRF+TVBUA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.2/font/bootstrap-icons.min.css" integrity="sha512-YFENbnqHbCRmJt5d+9lHimyEMt8LKSNTMLSaHjvsclnZGICeY/0KYEeiHwD1Ux4Tcao0h60tdcMv+0GljvWyHg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link href="//d3fy651gv2fhd3.cloudfront.net/stylesheet.min.css?v=20250218c" rel="stylesheet" /> <script type="text/javascript">var TEChartSettings = {}; var TESymbol = ''; var TECountry = ''; var TECategory = ''; var TEFrequency = ''; var TELanguage = ''; var TELastUpdate = '20250228000000'; var TEChartVersion = ''; var symbol = ''; var symbolType = ''; var hasCalendar = false; var isLoggedIn = false; var TEAlertsName = ''; var TEChartsDatasource = 'https://d3ii0wo49og5mi.cloudfront.net'; var IsMobile = false; var TEChartsMeta = ''; var TEForecast = []; var TEAuthorization = ''; var TESecurify = ''; var TESecurifyUrl = ''; var TEType = ''; var TEChartUrl = '/singapore/calendar'; var TEComparable = 0; var isAlertsLoaded = false; var IsDarkMode = false; var isPakoLoaded = false; var TEChartsToken = '20240229:nazare'; var TEObfuscationkey = 'tradingeconomics-charts-core-api-key'; var isCopyright = false;</script> <script type="text/javascript">var DEBUG = false;if (window.location.host.indexOf('localhost') > -1) DEBUG = true;else if (window.location.href.indexOf('debug') > -1) DEBUG = true;if (!DEBUG) {if (!window.console) window.console = {};var methods = ["log", "debug", "info"];for (var i = 0; i < methods.length; i++) {console[methods[i]] = function () { };}}</script> <link rel="icon" href="//d3fy651gv2fhd3.cloudfront.net/favicon.ico" /><link rel="canonical" href="https://tradingeconomics.com/singapore/calendar" /></head> <body > <script>IsDarkMode=false;</script> <form method="post" action="/singapore/calendar" id="aspnetForm"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="tF8haxnlfAVjQRmjQZFYCln0N7xjVrUGduXSE3uQETFotdtB/9MAK8MoWHG3NT0zU57/+iUM/510J7PabgV/3Q1/BI4=" /> </div> <script type="text/javascript"> //<![CDATA[ var isPostBack = false;//]]> </script> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="9ED6FB81" /> </div> <nav id="ctl00_NavigationUC1_ctl00_menu" class="navbar navbar-dark fixed-top" role="navigation"> <div class="container"> <div class="navbar-header navbar-header-search" id="searchMobileHeader"> <div class="d-flex justify-content-between"> <a class="navbar-brand" style="width: 100%"> <input type="text" placeholder="Search" id="thisIstheTinySearchBoxIdTag" autocomplete="off" class="nav-search-input-class navbar-search-2" /> </a> <ul id="thisIstheTinySearchResultsIdTag" class="dropdown-menu navbar-search-1"> <li> <div class="container-fluid"> <div id="dpSearch-resultCnt-tiny" class="dpTaResult"> </div> </div> </li> </ul> <div class="navbar-mobile-close-search"> <a noref class="navbar-mobile-item" id="thisIsTheTinyRemoveId"><i class="bi bi-x-lg"></i></a> </div> </div> </div> <div class="navbar-header navbar-collapse float-end" id="mainHeader"> <div class="d-flex"> <button type="button" class="navbar-toggler" data-bs-toggle="offcanvas" data-bs-target="#tesidemenu" aria-controls="tesidemenuoptions"> <span class="navbar-toggler-icon"></span> </button> <div class="logo-banner d-flex justify-content-between float-right"> <a class="navbar-brand" href="/"> <svg width="129" height="35" version="1.1" viewBox="0 0 34.131 9.2604" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" aria-label = "Trading Economics logo"> <g fill="#858585" stroke="#858585" stroke-width=".1" ><path d="m1.3315 8.5517v-3.7879h2.8086v0.64079h-2.0438v0.83974h1.9017v0.6382h-1.9017v1.0309h2.1162v0.6382z"/><path d="m7.2846 7.1591 0.74156 0.23513q-0.17053 0.62012-0.56844 0.92242-0.39532 0.29972-1.0051 0.29972-0.75448 0-1.2402-0.51418-0.48576-0.51676-0.48576-1.4108 0-0.94568 0.48834-1.4676 0.48834-0.52452 1.2842-0.52452 0.69505 0 1.1291 0.41083 0.25838 0.24288 0.38757 0.69763l-0.75706 0.18087q-0.067179-0.29456-0.28164-0.46509-0.21187-0.17053-0.51676-0.17053-0.42116 0-0.68471 0.30231-0.26097 0.30231-0.26097 0.97927 0 0.7183 0.25838 1.0232 0.25838 0.30489 0.67179 0.30489 0.30489 0 0.52452-0.19379 0.21962-0.19379 0.31523-0.60978z"/><path d="m8.5275 6.681q0-0.57878 0.17312-0.97152 0.12919-0.28939 0.3514-0.51935 0.22479-0.22996 0.49093-0.34106 0.35398-0.14986 0.81649-0.14986 0.83716 0 1.3384 0.51935 0.50385 0.51935 0.50385 1.4444 0 0.91726-0.49868 1.4366-0.49868 0.51676-1.3333 0.51676-0.84491 0-1.3436-0.51418-0.49868-0.51676-0.49868-1.4211zm0.78807-0.025838q0 0.64337 0.29714 0.97669 0.29714 0.33073 0.75448 0.33073 0.45734 0 0.74931-0.32815 0.29456-0.33073 0.29456-0.9896 0-0.65112-0.2868-0.97152-0.28422-0.32039-0.75706-0.32039-0.47284 0-0.76223 0.32556-0.28939 0.32298-0.28939 0.97669z"/><path d="m12.806 8.5517v-3.7879h0.74414l1.5503 2.5296v-2.5296h0.71055v3.7879h-0.7674l-1.527-2.4701v2.4701z"/><path d="m16.465 6.681q0-0.57878 0.17312-0.97152 0.12919-0.28939 0.3514-0.51935 0.22479-0.22996 0.49093-0.34106 0.35398-0.14986 0.81649-0.14986 0.83716 0 1.3384 0.51935 0.50384 0.51935 0.50384 1.4444 0 0.91726-0.49868 1.4366-0.49868 0.51676-1.3333 0.51676-0.84491 0-1.3436-0.51418-0.49868-0.51676-0.49868-1.4211zm0.78807-0.025838q0 0.64337 0.29714 0.97669 0.29714 0.33073 0.75448 0.33073t0.74931-0.32815q0.29456-0.33073 0.29456-0.9896 0-0.65112-0.2868-0.97152-0.28422-0.32039-0.75706-0.32039t-0.76223 0.32556q-0.28939 0.32298-0.28939 0.97669z"/><path d="m20.726 8.5517v-3.7879h1.1446l0.6873 2.5838 0.67955-2.5838h1.1472v3.7879h-0.71055v-2.9817l-0.75189 2.9817h-0.73639l-0.74931-2.9817v2.9817z"/><path d="m25.121 8.5517v-3.7879h0.76481v3.7879z"/><path d="m29.038 7.1591 0.74156 0.23513q-0.17053 0.62012-0.56844 0.92242-0.39532 0.29972-1.0051 0.29972-0.75448 0-1.2402-0.51418-0.48576-0.51676-0.48576-1.4108 0-0.94568 0.48834-1.4676 0.48834-0.52452 1.2842-0.52452 0.69505 0 1.1291 0.41083 0.25838 0.24288 0.38757 0.69763l-0.75706 0.18087q-0.06718-0.29456-0.28164-0.46509-0.21187-0.17053-0.51676-0.17053-0.42116 0-0.68471 0.30231-0.26097 0.30231-0.26097 0.97927 0 0.7183 0.25838 1.0232 0.25838 0.30489 0.67179 0.30489 0.30489 0 0.52452-0.19379 0.21962-0.19379 0.31523-0.60978z"/><path d="m30.242 7.3193 0.74414-0.072347q0.06718 0.37465 0.2713 0.55035 0.2067 0.1757 0.55552 0.1757 0.36949 0 0.55552-0.15503 0.18862-0.15761 0.18862-0.3669 0-0.13436-0.0801-0.22738-0.077514-0.095602-0.27388-0.16536-0.13436-0.046509-0.61237-0.16536-0.61495-0.15245-0.863-0.37465-0.34882-0.31264-0.34882-0.76223 0-0.28939 0.16278-0.54002 0.16536-0.25321 0.47284-0.38499 0.31006-0.13178 0.74672-0.13178 0.71314 0 1.0723 0.31264 0.36174 0.31264 0.37982 0.83457l-0.76481 0.03359q-0.04909-0.29197-0.21187-0.41858-0.1602-0.12919-0.48317-0.12919-0.33331 0-0.52193 0.13694-0.12144 0.08785-0.12144 0.23513 0 0.13436 0.11369 0.22996 0.14469 0.12144 0.7028 0.25321t0.82424 0.27389q0.26872 0.13953 0.41858 0.38499 0.15244 0.24288 0.15244 0.60203 0 0.32556-0.18087 0.60978-0.18087 0.28422-0.5116 0.42375-0.33073 0.13694-0.82424 0.13694-0.7183 0-1.1033-0.33073-0.38499-0.33331-0.45992-0.96893z"/></g> <g fill="#ddd" stroke="#ddd" stroke-width=".1" ><path d="m1.4629 4.2437v-2.8324h-1.0116v-0.57671h2.7091v0.57671h-1.0092v2.8324z"/><path d="m3.607 4.2437v-3.4091h1.4487q0.54648 0 0.79297 0.093018 0.24882 0.090692 0.39765 0.32556 0.14883 0.23487 0.14883 0.53718 0 0.3837-0.22557 0.63484-0.22557 0.24882-0.67438 0.31393 0.22324 0.13022 0.36742 0.28603 0.1465 0.1558 0.393 0.55345l0.41625 0.66508h-0.82321l-0.49764-0.74182q-0.2651-0.39765-0.36277-0.49997-0.097668-0.10464-0.20696-0.14185-0.1093-0.039532-0.34649-0.039532h-0.13953v1.4232zm0.68833-1.9673h0.50927q0.49532 0 0.61857-0.041858t0.19301-0.14418q0.069763-0.10232 0.069763-0.2558 0-0.17208-0.093018-0.27673-0.090692-0.10697-0.25812-0.13488-0.083716-0.011627-0.50229-0.011627h-0.53718z"/><path d="m10.118 4.2437h-0.74879l-0.29766-0.77437h-1.3627l-0.28138 0.77437h-0.73019l1.3278-3.4091h0.72786zm-1.2674-1.3488-0.46974-1.265-0.46044 1.265z"/><path d="m10.481 0.8346h1.2581q0.42556 0 0.6488 0.065112 0.29998 0.088367 0.51392 0.31393 0.21394 0.22557 0.32556 0.55345 0.11162 0.32556 0.11162 0.8046 0 0.4209-0.10464 0.72554-0.1279 0.37207-0.36509 0.60229-0.17906 0.17441-0.48369 0.27208-0.22789 0.072089-0.60926 0.072089h-1.2953zm0.68833 0.57671v2.258h0.51392q0.28835 0 0.41625-0.032556 0.16743-0.041858 0.27673-0.14185 0.11162-0.099994 0.18138-0.32789 0.06976-0.23022 0.06976-0.62554t-0.06976-0.60694-0.19534-0.33021q-0.12557-0.1186-0.31858-0.16046-0.14418-0.032556-0.56508-0.032556z"/><path d="m13.902 4.2437v-3.4091h0.68833v3.4091z"/><path d="m15.253 4.2437v-3.4091h0.66973l1.3953 2.2766v-2.2766h0.6395v3.4091h-0.69066l-1.3743-2.2231v2.2231z"/><path d="m20.271 2.9903v-0.57438h1.4836v1.3581q-0.21627 0.20929-0.62787 0.36974-0.40928 0.15813-0.83018 0.15813-0.53485 0-0.9325-0.22324-0.39765-0.22557-0.59764-0.64182-0.19999-0.41858-0.19999-0.90925 0-0.53253 0.22324-0.94645 0.22324-0.41393 0.65345-0.63484 0.32789-0.16976 0.81623-0.16976 0.63484 0 0.99064 0.26743 0.35812 0.2651 0.46044 0.73484l-0.68368 0.1279q-0.072088-0.25115-0.27208-0.39532-0.19766-0.1465-0.49532-0.1465-0.45114 0-0.71856 0.28603-0.2651 0.28603-0.2651 0.84879 0 0.60694 0.26975 0.91157 0.26975 0.30231 0.70693 0.30231 0.21627 0 0.43253-0.083716 0.21859-0.086041 0.3744-0.20696v-0.43253z"/></g> </svg> </a> <div class="d-flex align-items-center nav-options"> <div class="d-flex align-items-center nav-entry-link-group"> <a class="nav-entry-link d-none d-md-block" href="/calendar"><span>Calendar</span></a> <a class="nav-entry-link d-none d-md-block" href="/stream"><span>News</span></a> <div class="dropdown"> <a href="#" class="dropdown d-flex nav-entry-link d-none d-md-block" data-bs-toggle="dropdown"><span>Markets</span></a> <ul class="dropdown-menu nav-dropdown-menu"> <li class='dropdown-item nav-dropdown-item'><a href="/commodities">Commodities</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/currencies">Currencies</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/stocks">Stocks</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/bonds">Bonds</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/crypto">Crypto</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/earnings">Earnings</a></li> </ul> </div> <a class="nav-entry-link d-none d-lg-block" href="/indicators"><span>Indicators</span></a> <a class="nav-entry-link d-none d-xl-block" href="/countries"><span >Countries</span></a> <div class="dropdown"> <a href="#" class="dropdown d-flex nav-entry-link d-none d-md-block" data-bs-toggle="dropdown"><span>Forecasts</span></a> <ul class="dropdown-menu nav-dropdown-menu"> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/commodity">Commodities</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/currency">Currencies</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/stock-market">Stocks</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/government-bond-10y">Bonds</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/crypto">Crypto</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecasts">Countries</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/indicators?g=forecast">Indicators</a></li> </ul> </div> </div> <div class="search-li d-none d-lg-block"> <a noref id="thisIsTheSearchPlaceholderId" class="nav-searchbox-class stickydropdown d-block" title="Search"> <div id="thisIsTheSearchBoxWrapperId" class="typeahead-searchbox-glyphicon-wrapper d-flex "> <input type="text" placeholder="Search" aria-label="Search" id="thisIstheSearchBoxIdTag" autocomplete="off" class="d-none d-md-block nav-search-input-class"> </div> </a> <ul id="thisIstheSearchResultsIdTag" class="dropdown-menu nav-dropdown-menu typeahead-wrapper"> <li> <div class="container"> <div id="dpSearch-resultCnt" class="dpTaResult"> </div> </div> </li> </ul> </div> <div> <a class="d-block d-lg-none navbar-mobile-item" id="thisIsTheTinyGlyphiconId"><i class="bi bi-search me-2"></i></a> </div> <div class="dropdown dropdown-notification-list"> <button class="btn btn-notification-list" type="button" id="dropdownNotificationList" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop"> <svg xmlns="http://www.w3.org/2000/svg" width="21px" height="21px" viewBox="0 0 24 24" id="notification-empty" style="vertical-align:middle !important" data-name="notification-empty"><rect id="view-box" width="24" height="24" fill="none"/><path id="Shape" d="M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.248,1.248,0,0,0,2.1,10.572l.446-4.91a6.225,6.225,0,0,1,12.4,0l.446,4.91a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM4.045,5.8,3.6,10.708A2.738,2.738,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.054,1.054,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708L13.456,5.8a4.725,4.725,0,0,0-9.411,0Z" transform="translate(3.25 2.25)" fill="#ddd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="21px" height="21px" viewBox="0 0 24 24" id="notification-new" style="vertical-align:middle !important; display:none" data-name="notification-new"><rect id="view-box" width="24" height="24" fill="none" /><path id="Shape" d="M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.247,1.247,0,0,0,2.1,10.572l.446-4.91A6.227,6.227,0,0,1,10.618.286a5.477,5.477,0,0,0-.635,1.374A4.794,4.794,0,0,0,8.75,1.5,4.7,4.7,0,0,0,4.045,5.8L3.6,10.708A2.739,2.739,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.053,1.053,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708l-.2-2.18a5.473,5.473,0,0,0,1.526.221l.166,1.822a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM15.047,6.744A3.486,3.486,0,0,1,13.5,6.28L13.456,5.8a4.7,4.7,0,0,0-1.648-3.185,3.5,3.5,0,0,1,.61-1.417A6.221,6.221,0,0,1,14.95,5.662l.1,1.081v0Z" transform="translate(3.25 2.25)" fill="#ddd" /> <path id="Shape-2" data-name="Shape" d="M3.5,7A3.5,3.5,0,1,1,7,3.5,3.5,3.5,0,0,1,3.5,7Z" transform="translate(15 2)" fill="#4287f5" /> </svg> </button> <div class="offcanvas offcanvas-top notification-list container custom-offcanvas" tabindex="-1" id="offcanvasTop" data-bs-scroll="true" aria-labelledby="offcanvasTopLabel" style="top:50px !important; border: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);"> <div class="empty-notificationlist"> <div class="empty-notificationlist-content"> <span>You have no new notifications</span> <br> <i class="bi bi-bell-slash-fill"></i> <br> <div><a href="/stream" title="Show all news" class="empty-notificationlist-more"><div class="btn btn-outline-secondary">All News</div></a></div> </div> </div> </div> </div> <div class="userOptionsMenu"> <a title="" data-bs-toggle="offcanvas" href="#offcanvasGuest" role="button" aria-controls="offcanvasGuest"><i class="bi bi-person"></i></a> </div> </div> </div> </div> </div> <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasGuest" aria-labelledby="offcanvasGuestLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasGuestLabel"><b>Members</b></h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body user-offcanvas-body"> <div class="list-group list-group-user"> <a href="/analytics/pricing.aspx?source=menu " class="user-item list-group-item"> <b class="list-group-item-heading"><i class="bi bi-save2-fill me-2"></i> DATA PLANS</b><br> <span class="list-group-item-text">Download historical data for 20 million indicators using your browser.</span> </a> <div class="user-item list-group-item"> <div class="navbar-user-link"> <a href="/analytics/pricing.aspx?source=menu" class="navbar-te-link mx-1">Subscription Plans</a> | <a href="/analytics/features.aspx?source=menu" class="navbar-te-link mx-1">Features</a> </div> </div> </div> <div class="list-group list-group-user"> <a href="/api/" class="user-item list-group-item"> <b class="list-group-item-heading"><i class="bi bi-phone mx-1 me-2"></i>API GATEWAY</b><br> <span class="list-group-item-text mx-1">Direct access to our data from your apps using any programing language.</span> </a> <div class="user-item list-group-item"> <div> <a href="https://docs.tradingeconomics.com/" target="_blank" class="navbar-te-link mx-1">Docs</a> | <a href="/api/?source=menu" class="navbar-te-link mx-1">Features</a> | <a href="https://developer.tradingeconomics.com/" class="navbar-te-link mx-1">Developer</a> </div> </div> </div> <div class="list-group list-group-user"> <a class="user-item list-group-item" href="https://sso.tradingeconomics.com/sso/login?returnurl=https://tradingeconomics.com/singapore/calendar"><i class="bi bi-person-fill"></i> Already a user? <b>Login</b></a> </div> <style> .form-switch { width: 3.5em !important; height: 2em !important } .bi-sun-fill { font-size: 12px; color: #ddd !important; } .bi-moon-fill { font-size: 10px; color: #333 !important; } .darkmode-toggle-container { width: auto; padding: 0px; margin-left: 0px; margin-top: 0px; border: none; } .form-check-div-sun { width: 20px; margin-bottom: 3px; margin-left: -54px; position: relative } .form-check-div-moon { width: 20px; margin-bottom: 3px; margin-left: 3px; position: relative } .dk-switch-right-menu{ padding-left:10px; } </style> <div class="list-group list-group-user dk-switch-right-menu"> <div class="d-flex align-items-center darkmode-toggle-container"> <div class="form-check form-switch darkmode-form-switch user-item"> <input class="form-check-input p-1" type="checkbox" role="button" id="flexSwitchCheckChecked"> </div> <div class="form-check-div-sun"> <label class="form-check-label form-check-label-sun p-1 d-inline" for="flexSwitchCheckChecked"><i class="bi bi-sun-fill"></i></label> </div> <div class="form-check-div-moon"> <label class="form-check-label form-check-label-moon p-1 d-inline" for="flexSwitchCheckChecked"><i class="bi bi-moon-fill"></i></label> </div> </div> </div> <script> function SetTheme(isDark) { console.log('Changing theme', isDark); if (IsDarkMode != isDark) { IsDarkMode = isDark; document.body.classList.toggle("dark-theme"); // Set cookie const d = new Date(); d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000)); let expires = "expires=" + d.toUTCString(); document.cookie = "IsDarkMode" + "=" + IsDarkMode + ";" + expires + ";path=/"; IsDarkMode ? ga('event', 'te_darkmode_on') : ga('event', 'te_darkmode_off'); window.location.reload(); } } document.addEventListener('DOMContentLoaded', function () { let checkbox = document.getElementById("flexSwitchCheckChecked"); let sundiv = document.getElementsByClassName("form-check-label-sun")[0]; let moondiv = document.getElementsByClassName("form-check-label-moon")[0]; if (IsDarkMode) { sundiv.classList.add("d-none"); moondiv.classList.remove("d-none"); } else { moondiv.classList.add("d-none"); sundiv.classList.remove("d-none"); } checkbox.checked = IsDarkMode; }); document.getElementById("flexSwitchCheckChecked").addEventListener("change", function () { SetTheme(!IsDarkMode) }); </script> </div> </div> <div class="offcanvas offcanvas-start" tabindex="-1" id="tesidemenu" aria-labelledby="tesidemenuoptions"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel"></h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> <div class="row navbar-nav-scroll" style="--bs-scroll-height: 95vh;"> <div class="accordion" id="accordionNavbar"> <div class="accordion-item"> <div class="accordion-header menu-main-option"><a class="nav-link accordion-button navmenu-mobile-item" href="/calendar" target="_self"><i class="bi bi-calendar3 me-2"></i>Calendar</a></div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option"><a class="nav-link accordion-button navmenu-mobile-item" href="/stream" target="_self"><i class="bi bi-layout-text-sidebar me-2"></i>News</a></div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMarkets" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-arrow-down-up me-2"></i>Markets <i class="bi bi-caret-up-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseMarkets" class="accordion-collapse collapse show" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/currencies" target="_self">Currencies</a></li> <li><a class="navmobile-link nav-link" href="/stocks" target="_self">Stocks</a></li> <li><a class="navmobile-link nav-link" href="/commodities" target="_self">Commodities</a></li> <li><a class="navmobile-link nav-link" href="/bonds" target="_self">Bonds</a></li> <li><a class="navmobile-link nav-link" href="/crypto" target="_self">Crypto</a></li> <li><a class="navmobile-link nav-link" href="/earnings" target="_self">Earnings</a></li> <li><a class="navmobile-link nav-link" href="/holidays" target="_self">Holidays</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCountries" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-globe me-2"></i>Countries<i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseCountries" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/united-states/indicators" target="_self">United States</a></li> <li><a class="navmobile-link nav-link" href="/united-kingdom/indicators" target="_self">United Kingdom</a></li> <li><a class="navmobile-link nav-link" href="/euro-area/indicators" target="_self">Euro Area</a></li> <li><a class="navmobile-link nav-link" href="/australia/indicators" target="_self">Australia</a></li> <li><a class="navmobile-link nav-link" href="/canada/indicators" target="_self">Canada</a></li> <li><a class="navmobile-link nav-link" href="/japan/indicators" target="_self">Japan</a></li> <li><a class="navmobile-link nav-link" href="/china/indicators" target="_self">China</a></li> <li><a class="navmobile-link nav-link" href="/brazil/indicators" target="_self">Brazil</a></li> <li><a class="navmobile-link nav-link" href="/russia/indicators" target="_self">Russia</a></li> <li><a class="navmobile-link nav-link" href="/india/indicators" target="_self">India</a></li> <li><a class='navmobile-link nav-link' href="/countries" target="_self"><i class="bi bi-plus-square me-2"></i>More Countries</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseIndicators" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-bar-chart-fill me-2"></i>Indicators <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseIndicators" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/country-list/interest-rate" target="_self">Interest Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/inflation-rate" target="_self">Inflation Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/unemployment-rate" target="_self">Unemployment Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gdp-growth-rate" target="_self">GDP Growth</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gdp-per-capita" target="_self">GDP per Capita</a></li> <li><a class="navmobile-link nav-link" href="/country-list/current-account-to-gdp" target="_self">Current Account</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gold-reserves" target="_self">Gold Reserves</a></li> <li><a class="navmobile-link nav-link" href="/country-list/government-debt-to-gdp" target="_self">Government Debt</a></li> <li><a class="navmobile-link nav-link" href="/country-list/crude-oil-production" target="_self">Crude Oil Production</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gasoline-prices" target="_self">Gasoline Prices</a></li> <li><a class="navmobile-link nav-link" href="/country-list/rating" target="_self">Credit Rating</a></li> <li><a class='navmobile-link nav-link' href="/indicators" target="_self"><i class="bi bi-plus-square me-2"></i>More Indicators</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseForecasts" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-graph-down-arrow me-2"></i>Forecasts <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseForecasts" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li class="d-block d-sm-none"><a class="navmobile-link nav-link" href="/indicators?g=forecast" target="_self">Markets & Indicators</a></li> <li class="d-block d-sm-none"><a class="navmobile-link nav-link" href="/forecasts" target="_self">Countries</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecasts">Countries</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/indicators?g=forecast">Indicators</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/currency">Currencies</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/stock-market">Stocks</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/commodity">Commodities</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/government-bond-10y">Bonds</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/crypto">Crypto</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSolutions" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-code-square me-2"></i>Solutions <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseSolutions" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/analytics/features.aspx" title="Register">Data Subscriptions</a></li> <li><a class="navmobile-link nav-link" href="/api/" title="Register">API Access</a></li> <li><a class="navmobile-link nav-link" href="/analytics/pricing.aspx?source=nav">Pricing</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseApps" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-phone me-2"></i>Apps <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseApps" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="https://itunes.apple.com/us/app/trading-economics/id1142178921?mt=8" target="_self">App Store</a></li> <li><a class="navmobile-link nav-link" href="https://play.google.com/store/apps/details?id=com.tradingeconomics.calendar" target="_self">Google Play</a></li> <li><a class="navmobile-link nav-link" href="https://www.twitter.com/teconomics" target="_self">Twitter</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMore" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-question-circle me-2"></i>About <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseMore" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/api/customers.aspx" target="_self">Customers</a></li> <li><a class="navmobile-link nav-link" href="/investors.aspx" target="_self">Investors</a></li> <li><a class="navmobile-link nav-link" href="/careers.aspx" target="_self">Careers</a></li> <li><a class="navmobile-link nav-link" href="/about-te.aspx" target="_self">About us</a></li> <li><a class="navmobile-link nav-link" href="/contact.aspx" target="_self">Contact</a></li> </ul> </div> </div> </div> <div class="accordion-item d-block d-md-none" style="border: none"> <div class="accordion-header menu-main-option accordion-last-item" style="padding: 30px 0px !important;"></div> </div> </div> </div> </div> </div> </div> </nav> <script> document.addEventListener('DOMContentLoaded', function () { let accordionHeaders = document.querySelectorAll('.menu-main-option'); accordionHeaders.forEach(function (header) { header.addEventListener('click', function () { let caretIcon = header.querySelector('.caret-toggle'); let allCaretIcons = document.querySelectorAll('.menu-main-option .caret-toggle'); allCaretIcons.forEach(function (icon) { if (icon !== caretIcon) { icon.classList.remove('bi-caret-up-fill'); icon.classList.add('bi-caret-down-fill'); } }); caretIcon.classList.toggle('bi-caret-down-fill'); caretIcon.classList.toggle('bi-caret-up-fill'); }); }); }); </script> <div class="container"> <div class="row"> <div class='col-xl-8 col-lg-8' role="main"> <style>.te-title-footer {border: 1px solid #dddd;padding:10px; background-color: #f5f5f5;font-size: 16px;}.te-description-footer {border: 1px solid #dddd;padding:20px; margin-top: 20px;}</style> <style> .flag { width: 16px; height: 11px; background:url("https://d3fy651gv2fhd3.cloudfront.net/css/flags.png?v=20230412") no-repeat; } .flag.flag-ad {background-position: -16px 0} .flag.flag-ae {background-position: -32px 0} .flag.flag-af {background-position: -48px 0} .flag.flag-ag {background-position: -64px 0} .flag.flag-ai {background-position: -80px 0} .flag.flag-al {background-position: -96px 0} .flag.flag-am {background-position: -112px 0} .flag.flag-an {background-position: -128px 0} .flag.flag-ao {background-position: -144px 0} .flag.flag-ar {background-position: -160px 0} .flag.flag-as {background-position: -176px 0} .flag.flag-at {background-position: -192px 0} .flag.flag-au {background-position: -208px 0} .flag.flag-aw {background-position: -224px 0} .flag.flag-az {background-position: -240px 0} .flag.flag-ba {background-position: 0 -11px} .flag.flag-bb {background-position: -16px -11px} .flag.flag-bd {background-position: -32px -11px} .flag.flag-be {background-position: -48px -11px} .flag.flag-bf {background-position: -64px -11px} .flag.flag-bg {background-position: -80px -11px} .flag.flag-bh {background-position: -96px -11px} .flag.flag-bi {background-position: -112px -11px} .flag.flag-bj {background-position: -128px -11px} .flag.flag-bm {background-position: -144px -11px} .flag.flag-bn {background-position: -160px -11px} .flag.flag-bo {background-position: -176px -11px} .flag.flag-br {background-position: -192px -11px} .flag.flag-bs {background-position: -208px -11px} .flag.flag-bt {background-position: -224px -11px} .flag.flag-bv {background-position: -240px -11px} .flag.flag-bw {background-position: 0 -22px} .flag.flag-by {background-position: -16px -22px} .flag.flag-bz {background-position: -32px -22px} .flag.flag-ca {background-position: -48px -22px} .flag.flag-catalonia {background-position: -64px -22px} .flag.flag-cd {background-position: -80px -22px} .flag.flag-cf {background-position: -96px -22px} .flag.flag-cg {background-position: -112px -22px} .flag.flag-ch {background-position: -128px -22px} .flag.flag-ci {background-position: -144px -22px} .flag.flag-ck {background-position: -160px -22px} .flag.flag-cl {background-position: -176px -22px} .flag.flag-cm {background-position: -192px -22px} .flag.flag-cn {background-position: -208px -22px} .flag.flag-co {background-position: -224px -22px} .flag.flag-cr {background-position: -240px -22px} .flag.flag-cu {background-position: 0 -33px} .flag.flag-cv {background-position: -16px -33px} .flag.flag-cw {background-position: -32px -33px} .flag.flag-cy {background-position: -48px -33px} .flag.flag-cz {background-position: -64px -33px} .flag.flag-de {background-position: -80px -33px} .flag.flag-dj {background-position: -96px -33px} .flag.flag-dk {background-position: -112px -33px} .flag.flag-dm {background-position: -128px -33px} .flag.flag-do {background-position: -144px -33px} .flag.flag-dz {background-position: -160px -33px} .flag.flag-ec {background-position: -176px -33px} .flag.flag-ee {background-position: -192px -33px} .flag.flag-eg {background-position: -208px -33px} .flag.flag-eh {background-position: -224px -33px} .flag.flag-england {background-position: -240px -33px} .flag.flag-er {background-position: 0 -44px} .flag.flag-es {background-position: -16px -44px} .flag.flag-et {background-position: -32px -44px} .flag.flag-eu {background-position: -48px -44px} .flag.flag-ea {background-position: -48px -44px} .flag.flag-emu {background-position: -48px -44px} .flag.flag-fi {background-position: -64px -44px} .flag.flag-fj {background-position: -80px -44px} .flag.flag-fk {background-position: -96px -44px} .flag.flag-fm {background-position: -112px -44px} .flag.flag-fo {background-position: -128px -44px} .flag.flag-fr {background-position: -144px -44px} .flag.flag-ga {background-position: -160px -44px} .flag.flag-gb {background-position: -176px -44px} .flag.flag-gd {background-position: -192px -44px} .flag.flag-ge {background-position: -208px -44px} .flag.flag-gf {background-position: -224px -44px} .flag.flag-gg {background-position: -240px -44px} .flag.flag-gh {background-position: 0 -55px} .flag.flag-gi {background-position: -16px -55px} .flag.flag-gl {background-position: -32px -55px} .flag.flag-gm {background-position: -48px -55px} .flag.flag-gn {background-position: -64px -55px} .flag.flag-gp {background-position: -80px -55px} .flag.flag-gq {background-position: -96px -55px} .flag.flag-gr {background-position: -112px -55px} .flag.flag-gs {background-position: -128px -55px} .flag.flag-gt {background-position: -144px -55px} .flag.flag-gu {background-position: -160px -55px} .flag.flag-gw {background-position: -176px -55px} .flag.flag-gy {background-position: -192px -55px} .flag.flag-hk {background-position: -208px -55px} .flag.flag-hm {background-position: -224px -55px} .flag.flag-hn {background-position: -240px -55px} .flag.flag-hr {background-position: 0 -66px} .flag.flag-ht {background-position: -16px -66px} .flag.flag-hu {background-position: -32px -66px} .flag.flag-ic {background-position: -48px -66px} .flag.flag-id {background-position: -64px -66px} .flag.flag-ie {background-position: -80px -66px} .flag.flag-il {background-position: -96px -66px} .flag.flag-im {background-position: -112px -66px} .flag.flag-in {background-position: -128px -66px} .flag.flag-io {background-position: -144px -66px} .flag.flag-iq {background-position: -160px -66px} .flag.flag-ir {background-position: -176px -66px} .flag.flag-is {background-position: -192px -66px} .flag.flag-it {background-position: -208px -66px} .flag.flag-je {background-position: -224px -66px} .flag.flag-jm {background-position: -240px -66px} .flag.flag-jo {background-position: 0 -77px} .flag.flag-jp {background-position: -16px -77px} .flag.flag-ke {background-position: -32px -77px} .flag.flag-kg {background-position: -48px -77px} .flag.flag-kh {background-position: -64px -77px} .flag.flag-ki {background-position: -80px -77px} .flag.flag-km {background-position: -96px -77px} .flag.flag-kn {background-position: -112px -77px} .flag.flag-kp {background-position: -128px -77px} .flag.flag-kr {background-position: -144px -77px} .flag.flag-kurdistan {background-position: -160px -77px} .flag.flag-kw {background-position: -176px -77px} .flag.flag-ky {background-position: -192px -77px} .flag.flag-kz {background-position: -208px -77px} .flag.flag-la {background-position: -224px -77px} .flag.flag-lb {background-position: -240px -77px} .flag.flag-lc {background-position: 0 -88px} .flag.flag-li {background-position: -16px -88px} .flag.flag-lk {background-position: -32px -88px} .flag.flag-lr {background-position: -48px -88px} .flag.flag-ls {background-position: -64px -88px} .flag.flag-lt {background-position: -80px -88px} .flag.flag-lu {background-position: -96px -88px} .flag.flag-lv {background-position: -112px -88px} .flag.flag-ly {background-position: -128px -88px} .flag.flag-ma {background-position: -144px -88px} .flag.flag-mc {background-position: -160px -88px} .flag.flag-md {background-position: -176px -88px} .flag.flag-me {background-position: -192px -88px} .flag.flag-mg {background-position: -208px -88px} .flag.flag-mh {background-position: -224px -88px} .flag.flag-mk {background-position: -240px -88px} .flag.flag-ml {background-position: 0 -99px} .flag.flag-mm {background-position: -16px -99px} .flag.flag-mn {background-position: -32px -99px} .flag.flag-mo {background-position: -48px -99px} .flag.flag-mp {background-position: -64px -99px} .flag.flag-mq {background-position: -80px -99px} .flag.flag-mr {background-position: -96px -99px} .flag.flag-ms {background-position: -112px -99px} .flag.flag-mt {background-position: -128px -99px} .flag.flag-mu {background-position: -144px -99px} .flag.flag-mv {background-position: -160px -99px} .flag.flag-mw {background-position: -176px -99px} .flag.flag-mx {background-position: -192px -99px} .flag.flag-my {background-position: -208px -99px} .flag.flag-mz {background-position: -224px -99px} .flag.flag-na {background-position: -240px -99px} .flag.flag-nc {background-position: 0 -110px} .flag.flag-ne {background-position: -16px -110px} .flag.flag-nf {background-position: -32px -110px} .flag.flag-ng {background-position: -48px -110px} .flag.flag-ni {background-position: -64px -110px} .flag.flag-nl {background-position: -80px -110px} .flag.flag-no {background-position: -96px -110px} .flag.flag-np {background-position: -112px -110px} .flag.flag-nr {background-position: -128px -110px} .flag.flag-nu {background-position: -144px -110px} .flag.flag-nz {background-position: -160px -110px} .flag.flag-om {background-position: -176px -110px} .flag.flag-pa {background-position: -192px -110px} .flag.flag-pe {background-position: -208px -110px} .flag.flag-pf {background-position: -224px -110px} .flag.flag-pg {background-position: -240px -110px} .flag.flag-ph {background-position: 0 -121px} .flag.flag-pk {background-position: -16px -121px} .flag.flag-pl {background-position: -32px -121px} .flag.flag-pm {background-position: -48px -121px} .flag.flag-pn {background-position: -64px -121px} .flag.flag-pr {background-position: -80px -121px} .flag.flag-ps {background-position: -96px -121px} .flag.flag-pt {background-position: -112px -121px} .flag.flag-pw {background-position: -128px -121px} .flag.flag-py {background-position: -144px -121px} .flag.flag-qa {background-position: -160px -121px} .flag.flag-re {background-position: -176px -121px} .flag.flag-ro {background-position: -192px -121px} .flag.flag-rs {background-position: -208px -121px} .flag.flag-ru {background-position: -224px -121px} .flag.flag-rw {background-position: -240px -121px} .flag.flag-sa {background-position: 0 -132px} .flag.flag-sb {background-position: -16px -132px} .flag.flag-sc {background-position: -32px -132px} .flag.flag-scotland {background-position: -48px -132px} .flag.flag-sd {background-position: -64px -132px} .flag.flag-se {background-position: -80px -132px} .flag.flag-sg {background-position: -96px -132px} .flag.flag-sh {background-position: -112px -132px} .flag.flag-si {background-position: -128px -132px} .flag.flag-sk {background-position: -144px -132px} .flag.flag-sl {background-position: -160px -132px} .flag.flag-sm {background-position: -176px -132px} .flag.flag-sn {background-position: -192px -132px} .flag.flag-so {background-position: -208px -132px} .flag.flag-somaliland {background-position: -224px -132px} .flag.flag-sr {background-position: -240px -132px} .flag.flag-ss {background-position: 0 -143px} .flag.flag-st {background-position: -16px -143px} .flag.flag-sv {background-position: -32px -143px} .flag.flag-sx {background-position: -48px -143px} .flag.flag-sy {background-position: -64px -143px} .flag.flag-sz {background-position: -80px -143px} .flag.flag-tc {background-position: -96px -143px} .flag.flag-td {background-position: -112px -143px} .flag.flag-tf {background-position: -128px -143px} .flag.flag-tg {background-position: -144px -143px} .flag.flag-th {background-position: -160px -143px} .flag.flag-tj {background-position: -176px -143px} .flag.flag-tk {background-position: -192px -143px} .flag.flag-tl {background-position: -208px -143px} .flag.flag-tm {background-position: -224px -143px} .flag.flag-tn {background-position: -240px -143px} .flag.flag-to {background-position: 0 -154px} .flag.flag-tr {background-position: -16px -154px} .flag.flag-tt {background-position: -32px -154px} .flag.flag-tv {background-position: -48px -154px} .flag.flag-tw {background-position: -64px -154px} .flag.flag-tz {background-position: -80px -154px} .flag.flag-ua {background-position: -96px -154px} .flag.flag-ug {background-position: -112px -154px} .flag.flag-um {background-position: -128px -154px} .flag.flag-us {background-position: -144px -154px} .flag.flag-uy {background-position: -160px -154px} .flag.flag-uz {background-position: -176px -154px} .flag.flag-va {background-position: -192px -154px} .flag.flag-vc {background-position: -208px -154px} .flag.flag-ve {background-position: -224px -154px} .flag.flag-vg {background-position: -240px -154px} .flag.flag-vi {background-position: 0 -165px} .flag.flag-vn {background-position: -16px -165px} .flag.flag-vu {background-position: -32px -165px} .flag.flag-wales {background-position: -48px -165px} .flag.flag-wf {background-position: -64px -165px} .flag.flag-ws {background-position: -80px -165px} .flag.flag-ye {background-position: -96px -165px} .flag.flag-yt {background-position: -112px -165px} .flag.flag-za {background-position: -128px -165px} .flag.flag-zanzibar {background-position: -144px -165px} .flag.flag-zm {background-position: -160px -165px} .flag.flag-zw {background-position: -176px -165px} .flag.flag-xk {background-position: -192px -165px} </style> <script> console.log("/controls/calendaruc 2023-07-27") var COUNTRIES_COOKIE_NAME = "calendar-countries"; var RANGE_COOKIE_NAME = "calendar-range"; var IMPORTANCE_COOKIE_NAME = "calendar-importance"; var CUSTOM_RANGE_COOKIE_NAME = "cal-custom-range"; var WORLD_ISOS = ['afg','alb','dza','asm','and','ago','aia','atg','arg','arm','abw','aus','aut','aze','bhs','bhr','bgd','brb','blr','bel','blz','ben','bmu','btn','bol','bih','bwa','bra','brn','bgr','bfa','bdi','khm','cmr','can','cpv','cym','caf','tcd','chi','chl','chn','cxr','col','ccc','com','cod','cok','cri','null','hrv','cub','cyp','cze','dnk','dji','dma','dom','eap','tls','ecu','egy','slv','gnq','eri','est','eth','emu','eca','eun','flk','fro','fji','fin','null','fra','pyf','gab','gmb','geo','deu','gha','gib','grc','grl','grd','gum','gtm','gin','gnb','guy','hti','hpc','hic','noc','oec','hnd','hkg','hun','isl','ind','idn','irn','irq','irl','imy','isr','ita','civ','jam','jpn','jor','kaz','ken','kir','unk','kwt','kgz','lao','lac','lva','ldc','lbn','lso','lbr','lby','lie','ltu','lmy','lic','lmc','lux','mac','mkd','mdg','mwi','mys','mdv','mli','mlt','mhl','mrt','mus','myt','mex','fsm','mna','mic','mda','mco','mng','mne','msr','mar','moz','mmr','nam','npl','nld','ant','ncl','nzl','nic','ner','nga','nfk','prk','mnp','nor','omn','oth','pak','plw','pse','pan','png','pry','per','phl','pcn','pol','prt','pri','qat','null','cog','reu','rou','rus','rwa','wsm','smr','stp','sau','sen','srb','syc','sle','sgp','svk','svn','slb','som','zaf','sas','kor','ssd','esp','lka','shn','kna','lca','spm','vct','ssa','sdn','sur','swz','swe','che','syr','twn','tjk','tza','tha','tgo','tkl','ton','tto','tun','tur','tkm','tuv','uga','ukr','are','gbr','usa','umc','ury','uzb','vut','ven','vnm','vir','wlf','wbg','wld','yem','zmb','zwe','opc','imf','g20','g7']; var G20_ISOS = ['arg','aus','bra','can','chn','emu','eun','fra','deu','ind','idn','ita','jpn','mex','rus','sau','zaf','kor','esp','tur','gbr','usa','wld','opc','imf','g20','g7','sgp']; var AFRICA_ISOS = ['dza','ago','ben','bwa','bfa','bdi','cmr','cpv','caf','tcd','com','cod','dji','egy','gnq','eri','eth','gab','gmb','gha','gin','gnb','civ','ken','lso','lbr','lby','mdg','mwi','mli','mrt','mus','myt','mar','moz','nam','ner','nga','cog','reu','rwa','stp','sen','syc','sle','som','zaf','ssd','shn','sdn','swz','tza','tgo','tun','uga','zmb','zwe']; var AMERICA_ISOS = ['aia','atg','arg','abw','bhs','brb','blz','bmu','bol','bra','can','cym','chl','col','cri','cub','dma','dom','ecu','slv','flk','grl','grd','gtm','guy','hti','hnd','jam','mex','msr','ant','nic','pan','pry','per','pri','kna','lca','spm','vct','sur','tto','usa','ury','ven','vir']; var ASIA_ISOS = ['afg','arm','aze','bhr','bgd','btn','brn','khm','chn','cxr','tls','geo','hkg','ind','idn','irn','irq','isr','jpn','jor','kaz','kwt','kgz','lao','lbn','mac','mys','mdv','mng','mmr','npl','prk','mnp','omn','pak','pse','phl','qat','sau','sgp','kor','lka','syr','twn','tjk','tha','tkm','are','uzb','vnm','wbg','yem']; var EUROPE_ISOS = ['alb','and','aut','blr','bel','bih','bgr','chi','hrv','cyp','cze','dnk','est','emu','eun','fro','fin','fra','deu','gib','grc','hun','isl','irl','imy','ita','unk','lva','lie','ltu','lux','mkd','mlt','mda','mco','mne','nld','nor','pol','prt','rou','rus','smr','srb','svk','svn','esp','swe','che','tur','ukr','gbr']; var GLOBALS = ['world', 'g20', 'africa', 'america', 'asia', 'europe']; var selected_countries = ['arg','aus','bra','can','chn','emu','eun','fra','deu','ind','idn','ita','jpn','mex','rus','sau','zaf','kor','esp','tur','gbr','usa','wld','opc','imf','g20','g7','sgp']; if (selected_countries.length == 1 && selected_countries[0].indexOf('%2c') > -1) { selected_countries = selected_countries[0].split('%2c'); } </script> <style> .calendar-event { color: #333; font-weight: normal } #calendar a:hover{ text-decoration: underline; } .calendar-reference { font-size: .9em; color: #ddd; } .te-alert-bell { color: #ddd; cursor: pointer; visibility: visible } .te-alert-subscribed { color: #333; visibility: visible } body.dark-theme .te-alert-bell { color: #000 } body.dark-theme .te-alert-subscribed { color: limegreen } .bold{ font-weight:bold; } </style> <table style="width: 100%"> <tr> <td> <div class="btn-group btn-group-calendar"> <div class="btn-group"> <button type="button" class="btn btn-outline-secondary btn-calendar" onclick="toggleMainCountrySelection('off');" data-bs-toggle="dropdown"> <i class="bi bi-calendar3"></i><span class="d-none d-lg-inline"> Recent <span class="dropdown-toggle"></span></span> </button> <ul class="dropdown-menu"> <li class="dropdown-item te-c-option"> <a noref onclick="setCalendarRange('0')"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> Recent </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('1')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Today </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('2')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Tomorrow </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('3')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> This Week </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('4')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Next Week </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('5')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> This Month </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('6')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Next Month </a> </li> <li class="divider"></li> <li class="dropdown-item te-c-option"> <a noref onclick="setCalendarRange('-1')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Yesterday </a> </li> <li class="dropdown-item te-c-option "> <a noref onclick="setCalendarRange('-2')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Previous Week </a> </li> <li class="dropdown-item te-c-option"> <a noref onclick="setCalendarRange('-3')"> <input type="checkbox" class="form-check-input" autocomplete="off" /> Previous Month </a> </li> <li class="dropdown-divider"></li> <li class="dropdown-item te-c-option"> <a role="menuitem" href="#" data-bs-toggle="collapse" data-bs-target="#datesDiv"><i class="bi bi-pencil"></i> Custom</a></li> </ul> </div> <div class="btn-group"> <button id="ctl00_ContentPlaceHolder1_ctl00_Button1" type="button" class="btn btn-outline-secondary btn-calendar" data-bs-toggle="dropdown" onclick="toggleMainCountrySelection('off');"> <i class="bi bi-star-fill"></i> <span class="d-none d-lg-inline">Impact <span class="dropdown-toggle"></span></span> </button> <ul class="dropdown-menu"> <li class="dropdown-item"> <a noref onclick="setCalendarImportance('1');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <i class="bi bi-star-fill"></i> </a> </li> <li class="dropdown-item"> <a noref onclick="setCalendarImportance('2');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i> </a> </li> <li class="dropdown-item"> <a noref onclick="setCalendarImportance('3');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i></a> </li> </ul> </div> <div class="btn-group"> <button type="button" class="btn btn-outline-secondary btn-calendar active" data-bs-toggle="dropdown"> <i class="bi bi-bar-chart-fill"></i> <span class="d-none d-lg-inline">Calendar <span class="dropdown-toggle"></span></span> </button> <ul class="dropdown-menu"> <li class="dropdown-item"><a href="/calendar">All Events</a></li> <li class="dropdown-item"><a href="/calendar/interest-rate">Interest Rate</a></li> <li class="dropdown-item"><a href="/calendar/inflation">Prices & Inflation</a></li> <li class="dropdown-item"><a href="/calendar/labour">Labour Market</a></li> <li class="dropdown-item"><a href="/calendar/gdp">GDP Growth</a></li> <li class="dropdown-item"><a href="/calendar/trade">Foreign Trade</a></li> <li class="dropdown-item"><a href="/calendar/government">Government</a></li> <li class="dropdown-item"><a href="/calendar/business">Business Confidence</a></li> <li class="dropdown-item"><a href="/calendar/consumer">Consumer Sentiment</a></li> <li class="dropdown-item"><a href="/calendar/housing">Housing Market</a></li> <li class="dropdown-item"><a href="/calendar/bonds">Bond Auctions</a></li> <li class="dropdown-item"><a href="/calendar/energy">Energy</a></li> <li class="dropdown-item"><a href="/holidays">Holidays</a></li> <li class="dropdown-item"><a href="/earnings">Earnings</a></li> </ul> </div> <div class="btn-group"> <div class="btn btn-outline-secondary btn-calendar"> <select name="ctl00$ContentPlaceHolder1$ctl00$DropDownListTimezone" id="DropDownListTimezone" class="te-logic-timezone-select" onchange="setSelectedOffset(this);" style="text-transform: uppercase;"> <option value="-720">UTC -12</option> <option value="-660">UTC -11</option> <option value="-600">UTC -10</option> <option value="-540">UTC -9</option> <option value="-480">UTC -8</option> <option value="-420">UTC -7</option> <option value="-360">UTC -6</option> <option value="-300">UTC -5</option> <option value="-240">UTC -4</option> <option value="-180">UTC -3</option> <option value="-120">UTC -2</option> <option value="-60">UTC -1</option> <option selected="selected" value="0">UTC</option> <option value="60">UTC +1</option> <option value="120">UTC +2</option> <option value="180">UTC +3</option> <option value="210">UTC +3:30</option> <option value="240">UTC +4</option> <option value="270">UTC +4:30</option> <option value="300">UTC +5</option> <option value="330">UTC +5:30</option> <option value="345">UTC +5:45</option> <option value="360">UTC +6</option> <option value="420">UTC +7</option> <option value="480">UTC +8</option> <option value="540">UTC +9</option> <option value="570">UTC +9:30</option> <option value="600">UTC +10</option> <option value="630">UTC +10:30</option> <option value="660">UTC +11</option> <option value="720">UTC +12</option> <option value="780">UTC +13</option> <option value="840" onclick="setOffset(840);">UTC +14</option> </select> </div> </div> </div> </td> <td> <div class="btn-group calendar-download float-end"></div> </td> </tr> </table> <div id="datesDiv" class="collapse"> <br /> <div class="input-group"> <span class="input-group-text d-none d-md-inline">From</span> <input type="text" id="startDate" class="form-select" value="2025-02-28 00:33" style="background-image: none;"/> <span class="input-group-text d-none d-md-inline">Until</span> <input type="text" id="endDate" class="form-select" value="2025-03-24 00:33" style="background-image: none;"/> <span class="input-group-btn"> <button class="btn btn-success" onclick="setCustomDates(event);">Submit</button> </span> </div> </div> <div id="te-c-loading" class="d-none"> <img alt="Chart is Loading" src="https://d3fy651gv2fhd3.cloudfront.net/images/progress-wheel.gif" /> </div> <span id="te-c-main-countries" class="d-none small"> <br /> <div class="table-responsive " style="margin-bottom: 0px;"> <div class='btn-group float-end;' style="padding: 10px 1px; z-index: 2;"> <span class="btn btn-outline-secondary te-c-option-world " onclick="calendarSelecting(this, event, 'World', true);"> <a noref target="_self">All</a> </span> <span class="btn btn-outline-secondary te-c-option-g20 " onclick="calendarSelecting(this, event, 'G20', true);"> <a noref target="_self">Major</a> </span> <span class="btn btn-outline-secondary te-c-option-africa " onclick="calendarSelecting(this, event, 'Africa', true);"> <a noref target="_self">Africa</a> </span> <span class="btn btn-outline-secondary te-c-option-america " onclick="calendarSelecting(this, event, 'America', true);"> <a noref target="_self">America</a> </span> <span class="btn btn-outline-secondary te-c-option-asia " onclick="calendarSelecting(this, event, 'Asia', true);"> <a noref target="_self">Asia</a> </span> <span class="btn btn-outline-secondary te-c-option-europe " onclick="calendarSelecting(this, event, 'Europe', true);"> <a noref target="_self">Europe</a> </span> </div> <div class='btn-group float-end;' style="padding: 10px 10px 10px 0; z-index: 2;"> <div class="btn-group"> <a noref class="btn btn-outline-secondary te-c-option" onclick="clearSelection();" style="text-decoration: none;">Clear</a> </div> <div class="btn-group d-none d-md-block"> <a noref class="btn btn-outline-secondary te-c-option" onclick="toggleMainCountrySelection();" style="text-decoration: none;">Close</a> </div> <div class="btn-group"> <a noref class="btn btn-success te-c-option" onclick="saveSelectionAndGO();" style="text-decoration: none;"><i class="bi bi-save2-fill"></i> Save</a> </div> </div> <span id="te-c-all" class="row" style="margin-right: 0;"> <ul class="list-unstyled col-md-3 col-6"> <li class="te-c-option te-c-option-afg" onclick="calendarSelecting(this, event, 'AFG');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Afghanistan</a> </li> <li class="te-c-option te-c-option-alb" onclick="calendarSelecting(this, event, 'ALB');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Albania</a> </li> <li class="te-c-option te-c-option-dza" onclick="calendarSelecting(this, event, 'DZA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Algeria</a> </li> <li class="te-c-option te-c-option-ago" onclick="calendarSelecting(this, event, 'AGO');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Angola</a> </li> <li class="te-c-option te-c-option-arg" onclick="calendarSelecting(this, event, 'ARG');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Argentina</a> </li> <li class="te-c-option te-c-option-arm" onclick="calendarSelecting(this, event, 'ARM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Armenia</a> </li> <li class="te-c-option te-c-option-aus" onclick="calendarSelecting(this, event, 'AUS');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Australia</a> </li> <li class="te-c-option te-c-option-aut" onclick="calendarSelecting(this, event, 'AUT');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Austria</a> </li> <li class="te-c-option te-c-option-aze" onclick="calendarSelecting(this, event, 'AZE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Azerbaijan</a> </li> <li class="te-c-option te-c-option-bhr" onclick="calendarSelecting(this, event, 'BHR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Bahrain</a> </li> <li class="te-c-option te-c-option-bgd" onclick="calendarSelecting(this, event, 'BGD');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Bangladesh</a> </li> <li class="te-c-option te-c-option-blr" onclick="calendarSelecting(this, event, 'BLR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Belarus</a> </li> <li class="te-c-option te-c-option-bel" onclick="calendarSelecting(this, event, 'BEL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Belgium</a> </li> <li class="te-c-option te-c-option-bol" onclick="calendarSelecting(this, event, 'BOL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Bolivia</a> </li> <li class="te-c-option te-c-option-bih" onclick="calendarSelecting(this, event, 'BIH');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Bosnia and Herzegovina</a> </li> <li class="te-c-option te-c-option-bwa" onclick="calendarSelecting(this, event, 'BWA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Botswana</a> </li> <li class="te-c-option te-c-option-bra" onclick="calendarSelecting(this, event, 'BRA');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Brazil</a> </li> <li class="te-c-option te-c-option-brn" onclick="calendarSelecting(this, event, 'BRN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Brunei</a> </li> <li class="te-c-option te-c-option-bgr" onclick="calendarSelecting(this, event, 'BGR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Bulgaria</a> </li> <li class="te-c-option te-c-option-khm" onclick="calendarSelecting(this, event, 'KHM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Cambodia</a> </li> <li class="te-c-option te-c-option-cmr" onclick="calendarSelecting(this, event, 'CMR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Cameroon</a> </li> <li class="te-c-option te-c-option-can" onclick="calendarSelecting(this, event, 'CAN');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Canada</a> </li> <li class="te-c-option te-c-option-cpv" onclick="calendarSelecting(this, event, 'CPV');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Cape Verde</a> </li> <li class="te-c-option te-c-option-chl" onclick="calendarSelecting(this, event, 'CHL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Chile</a> </li> <li class="te-c-option te-c-option-chn" onclick="calendarSelecting(this, event, 'CHN');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>China</a> </li> <li class="te-c-option te-c-option-col" onclick="calendarSelecting(this, event, 'COL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Colombia</a> </li> <li class="te-c-option te-c-option-cod" onclick="calendarSelecting(this, event, 'COD');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Congo</a> </li> <li class="te-c-option te-c-option-cri" onclick="calendarSelecting(this, event, 'CRI');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Costa Rica</a> </li> <li class="te-c-option te-c-option-hrv" onclick="calendarSelecting(this, event, 'HRV');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Croatia</a> </li> <li class="te-c-option te-c-option-cub" onclick="calendarSelecting(this, event, 'CUB');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Cuba</a> </li> <li class="te-c-option te-c-option-cyp" onclick="calendarSelecting(this, event, 'CYP');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Cyprus</a> </li> <li class="te-c-option te-c-option-cze" onclick="calendarSelecting(this, event, 'CZE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Czech Republic</a> </li> <li class="te-c-option te-c-option-dnk" onclick="calendarSelecting(this, event, 'DNK');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Denmark</a> </li> <li class="te-c-option te-c-option-ecu" onclick="calendarSelecting(this, event, 'ECU');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ecuador</a> </li> <li class="te-c-option te-c-option-egy" onclick="calendarSelecting(this, event, 'EGY');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Egypt</a> </li> <li class="te-c-option te-c-option-slv" onclick="calendarSelecting(this, event, 'SLV');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>El Salvador</a> </li> </ul> <ul class="list-unstyled col-md-3 col-6 order-1 order-md-0"> <li class="te-c-option te-c-option-est" onclick="calendarSelecting(this, event, 'EST');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Estonia</a> </li> <li class="te-c-option te-c-option-eth" onclick="calendarSelecting(this, event, 'ETH');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ethiopia</a> </li> <li class="te-c-option te-c-option-emu" onclick="calendarSelecting(this, event, 'EMU');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Euro Area</a> </li> <li class="te-c-option te-c-option-fin" onclick="calendarSelecting(this, event, 'FIN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Finland</a> </li> <li class="te-c-option te-c-option-fra" onclick="calendarSelecting(this, event, 'FRA');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>France</a> </li> <li class="te-c-option te-c-option-geo" onclick="calendarSelecting(this, event, 'GEO');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Georgia</a> </li> <li class="te-c-option te-c-option-g20" onclick="calendarSelecting(this, event, 'G20');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>G20</a> </li> <li class="te-c-option te-c-option-g7" onclick="calendarSelecting(this, event, 'G7');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>G7</a> </li> <li class="te-c-option te-c-option-deu" onclick="calendarSelecting(this, event, 'DEU');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Germany</a> </li> <li class="te-c-option te-c-option-gha" onclick="calendarSelecting(this, event, 'GHA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ghana</a> </li> <li class="te-c-option te-c-option-grc" onclick="calendarSelecting(this, event, 'GRC');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Greece</a> </li> <li class="te-c-option te-c-option-hnd" onclick="calendarSelecting(this, event, 'HND');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Honduras</a> </li> <li class="te-c-option te-c-option-hkg" onclick="calendarSelecting(this, event, 'HKG');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Hong Kong</a> </li> <li class="te-c-option te-c-option-hun" onclick="calendarSelecting(this, event, 'HUN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Hungary</a> </li> <li class="te-c-option te-c-option-isl" onclick="calendarSelecting(this, event, 'ISL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Iceland</a> </li> <li class="te-c-option te-c-option-ind" onclick="calendarSelecting(this, event, 'IND');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>India</a> </li> <li class="te-c-option te-c-option-idn" onclick="calendarSelecting(this, event, 'IDN');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Indonesia</a> </li> <li class="te-c-option te-c-option-imf" onclick="calendarSelecting(this, event, 'IMF');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>IMF</a> </li> <li class="te-c-option te-c-option-irn" onclick="calendarSelecting(this, event, 'IRN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Iran</a> </li> <li class="te-c-option te-c-option-irl" onclick="calendarSelecting(this, event, 'IRL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ireland</a> </li> <li class="te-c-option te-c-option-isr" onclick="calendarSelecting(this, event, 'ISR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Israel</a> </li> <li class="te-c-option te-c-option-ita" onclick="calendarSelecting(this, event, 'ITA');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Italy</a> </li> <li class="te-c-option te-c-option-civ" onclick="calendarSelecting(this, event, 'CIV');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ivory Coast</a> </li> <li class="te-c-option te-c-option-jam" onclick="calendarSelecting(this, event, 'JAM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Jamaica</a> </li> <li class="te-c-option te-c-option-jpn" onclick="calendarSelecting(this, event, 'JPN');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Japan</a> </li> <li class="te-c-option te-c-option-jor" onclick="calendarSelecting(this, event, 'JOR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Jordan</a> </li> <li class="te-c-option te-c-option-kaz" onclick="calendarSelecting(this, event, 'KAZ');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Kazakhstan</a> </li> <li class="te-c-option te-c-option-ken" onclick="calendarSelecting(this, event, 'KEN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Kenya</a> </li> <li class="te-c-option te-c-option-unk" onclick="calendarSelecting(this, event, 'UNK');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Kosovo</a> </li> <li class="te-c-option te-c-option-kwt" onclick="calendarSelecting(this, event, 'KWT');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Kuwait</a> </li> <li class="te-c-option te-c-option-kgz" onclick="calendarSelecting(this, event, 'KGZ');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Kyrgyzstan</a> </li> <li class="te-c-option te-c-option-lva" onclick="calendarSelecting(this, event, 'LVA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Latvia</a> </li> <li class="te-c-option te-c-option-lbn" onclick="calendarSelecting(this, event, 'LBN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Lebanon</a> </li> <li class="te-c-option te-c-option-ltu" onclick="calendarSelecting(this, event, 'LTU');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Lithuania</a> </li> <li class="te-c-option te-c-option-lux" onclick="calendarSelecting(this, event, 'LUX');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Luxembourg</a> </li> <li class="te-c-option te-c-option-mac" onclick="calendarSelecting(this, event, 'MAC');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Macau</a> </li> </ul> <ul class="list-unstyled col-md-3 col-6"> <li class="te-c-option te-c-option-mkd" onclick="calendarSelecting(this, event, 'MKD');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Macedonia</a> </li> <li class="te-c-option te-c-option-mdg" onclick="calendarSelecting(this, event, 'MDG');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Madagascar</a> </li> <li class="te-c-option te-c-option-mys" onclick="calendarSelecting(this, event, 'MYS');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Malaysia</a> </li> <li class="te-c-option te-c-option-mli" onclick="calendarSelecting(this, event, 'MLI');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Mali</a> </li> <li class="te-c-option te-c-option-mlt" onclick="calendarSelecting(this, event, 'MLT');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Malta</a> </li> <li class="te-c-option te-c-option-mus" onclick="calendarSelecting(this, event, 'MUS');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Mauritius</a> </li> <li class="te-c-option te-c-option-mex" onclick="calendarSelecting(this, event, 'MEX');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Mexico</a> </li> <li class="te-c-option te-c-option-mda" onclick="calendarSelecting(this, event, 'MDA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Moldova</a> </li> <li class="te-c-option te-c-option-mng" onclick="calendarSelecting(this, event, 'MNG');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Mongolia</a> </li> <li class="te-c-option te-c-option-mne" onclick="calendarSelecting(this, event, 'MNE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Montenegro</a> </li> <li class="te-c-option te-c-option-mar" onclick="calendarSelecting(this, event, 'MAR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Morocco</a> </li> <li class="te-c-option te-c-option-moz" onclick="calendarSelecting(this, event, 'MOZ');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Mozambique</a> </li> <li class="te-c-option te-c-option-mmr" onclick="calendarSelecting(this, event, 'MMR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Myanmar</a> </li> <li class="te-c-option te-c-option-nam" onclick="calendarSelecting(this, event, 'NAM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Namibia</a> </li> <li class="te-c-option te-c-option-nld" onclick="calendarSelecting(this, event, 'NLD');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Netherlands</a> </li> <li class="te-c-option te-c-option-nzl" onclick="calendarSelecting(this, event, 'NZL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>New Zealand</a> </li> <li class="te-c-option te-c-option-nic" onclick="calendarSelecting(this, event, 'NIC');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Nicaragua</a> </li> <li class="te-c-option te-c-option-nga" onclick="calendarSelecting(this, event, 'NGA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Nigeria</a> </li> <li class="te-c-option te-c-option-nor" onclick="calendarSelecting(this, event, 'NOR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Norway</a> </li> <li class="te-c-option te-c-option-omn" onclick="calendarSelecting(this, event, 'OMN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Oman</a> </li> <li class="te-c-option te-c-option-opc" onclick="calendarSelecting(this, event, 'OPC');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>OPEC</a> </li> <li class="te-c-option te-c-option-pak" onclick="calendarSelecting(this, event, 'PAK');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Pakistan</a> </li> <li class="te-c-option te-c-option-pse" onclick="calendarSelecting(this, event, 'PSE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Palestine</a> </li> <li class="te-c-option te-c-option-pan" onclick="calendarSelecting(this, event, 'PAN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Panama</a> </li> <li class="te-c-option te-c-option-pry" onclick="calendarSelecting(this, event, 'PRY');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Paraguay</a> </li> <li class="te-c-option te-c-option-per" onclick="calendarSelecting(this, event, 'PER');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Peru</a> </li> <li class="te-c-option te-c-option-phl" onclick="calendarSelecting(this, event, 'PHL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Philippines</a> </li> <li class="te-c-option te-c-option-pol" onclick="calendarSelecting(this, event, 'POL');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Poland</a> </li> <li class="te-c-option te-c-option-prt" onclick="calendarSelecting(this, event, 'PRT');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Portugal</a> </li> <li class="te-c-option te-c-option-pri" onclick="calendarSelecting(this, event, 'PRI');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Puerto Rico</a> </li> <li class="te-c-option te-c-option-qat" onclick="calendarSelecting(this, event, 'QAT');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Qatar</a> </li> <li class="te-c-option te-c-option-cog" onclick="calendarSelecting(this, event, 'COG');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Republic of the Congo</a> </li> <li class="te-c-option te-c-option-rou" onclick="calendarSelecting(this, event, 'ROU');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Romania</a> </li> <li class="te-c-option te-c-option-rus" onclick="calendarSelecting(this, event, 'RUS');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Russia</a> </li> <li class="te-c-option te-c-option-rwa" onclick="calendarSelecting(this, event, 'RWA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Rwanda</a> </li> <li class="te-c-option te-c-option-stp" onclick="calendarSelecting(this, event, 'STP');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Sao Tome and Principe</a> </li> </ul> <ul class="list-unstyled col-md-3 col-6 order-last"> <li class="te-c-option te-c-option-sau" onclick="calendarSelecting(this, event, 'SAU');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Saudi Arabia</a> </li> <li class="te-c-option te-c-option-sen" onclick="calendarSelecting(this, event, 'SEN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Senegal</a> </li> <li class="te-c-option te-c-option-srb" onclick="calendarSelecting(this, event, 'SRB');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Serbia</a> </li> <li class="te-c-option te-c-option-sle" onclick="calendarSelecting(this, event, 'SLE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Sierra Leone</a> </li> <li class="te-c-option te-c-option-sgp" onclick="calendarSelecting(this, event, 'SGP');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Singapore</a> </li> <li class="te-c-option te-c-option-svk" onclick="calendarSelecting(this, event, 'SVK');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Slovakia</a> </li> <li class="te-c-option te-c-option-svn" onclick="calendarSelecting(this, event, 'SVN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Slovenia</a> </li> <li class="te-c-option te-c-option-som" onclick="calendarSelecting(this, event, 'SOM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Somalia</a> </li> <li class="te-c-option te-c-option-zaf" onclick="calendarSelecting(this, event, 'ZAF');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>South Africa</a> </li> <li class="te-c-option te-c-option-kor" onclick="calendarSelecting(this, event, 'KOR');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>South Korea</a> </li> <li class="te-c-option te-c-option-esp" onclick="calendarSelecting(this, event, 'ESP');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Spain</a> </li> <li class="te-c-option te-c-option-lka" onclick="calendarSelecting(this, event, 'LKA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Sri Lanka</a> </li> <li class="te-c-option te-c-option-sdn" onclick="calendarSelecting(this, event, 'SDN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Sudan</a> </li> <li class="te-c-option te-c-option-swe" onclick="calendarSelecting(this, event, 'SWE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Sweden</a> </li> <li class="te-c-option te-c-option-che" onclick="calendarSelecting(this, event, 'CHE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Switzerland</a> </li> <li class="te-c-option te-c-option-twn" onclick="calendarSelecting(this, event, 'TWN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Taiwan</a> </li> <li class="te-c-option te-c-option-tjk" onclick="calendarSelecting(this, event, 'TJK');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Tajikistan</a> </li> <li class="te-c-option te-c-option-tza" onclick="calendarSelecting(this, event, 'TZA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Tanzania</a> </li> <li class="te-c-option te-c-option-tha" onclick="calendarSelecting(this, event, 'THA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Thailand</a> </li> <li class="te-c-option te-c-option-tto" onclick="calendarSelecting(this, event, 'TTO');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Trinidad and Tobago</a> </li> <li class="te-c-option te-c-option-tun" onclick="calendarSelecting(this, event, 'TUN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Tunisia</a> </li> <li class="te-c-option te-c-option-tur" onclick="calendarSelecting(this, event, 'TUR');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>Turkey</a> </li> <li class="te-c-option te-c-option-uga" onclick="calendarSelecting(this, event, 'UGA');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Uganda</a> </li> <li class="te-c-option te-c-option-ukr" onclick="calendarSelecting(this, event, 'UKR');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Ukraine</a> </li> <li class="te-c-option te-c-option-are" onclick="calendarSelecting(this, event, 'ARE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>United Arab Emirates</a> </li> <li class="te-c-option te-c-option-gbr" onclick="calendarSelecting(this, event, 'GBR');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>United Kingdom</a> </li> <li class="te-c-option te-c-option-usa" onclick="calendarSelecting(this, event, 'USA');"> <input type="checkbox" class="form-check-input" checked autocomplete="off" /> <a noref>United States</a> </li> <li class="te-c-option te-c-option-ury" onclick="calendarSelecting(this, event, 'URY');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Uruguay</a> </li> <li class="te-c-option te-c-option-uzb" onclick="calendarSelecting(this, event, 'UZB');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Uzbekistan</a> </li> <li class="te-c-option te-c-option-ven" onclick="calendarSelecting(this, event, 'VEN');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Venezuela</a> </li> <li class="te-c-option te-c-option-vnm" onclick="calendarSelecting(this, event, 'VNM');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Vietnam</a> </li> <li class="te-c-option te-c-option-zwe" onclick="calendarSelecting(this, event, 'ZWE');"> <input type="checkbox" class="form-check-input" autocomplete="off" /> <a noref>Zimbabwe</a> </li> </ul> </span> </div> </span> <br /> <div class="table-responsive"> <table id="calendar" class="table table-hover table-condensed"> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl01_th1" class="table-header" data-fixed_copy="0"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Friday February 28 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl01_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="0"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Friday February 28 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/loans-to-private-sector" data-id="374213" data-country="singapore" data-category="loans to private sector" data-event="bank lending" data-symbol='SINGAPORELOATOPRISEC'> <td style="white-space: nowrap;" class=' 2025-02-28'> <span class="event-0 calendar-date-1"> 02:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/loans-to-private-sector'>Bank Lending</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-positive"> <a href='/singapore/loans-to-private-sector'><span id='actual'>S$836.3B</span></a> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>S$835B</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/loans-to-private-sector'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/loans-to-private-sector'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374213.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/loans-to-private-sector' data-chart='/singapore/loans-to-private-sector' title='SG Loans to Private Sector' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/export-prices-yoy" data-id="374230" data-country="singapore" data-category="export prices yoy" data-event="export prices yoy" data-symbol='SGPEPY'> <td style="white-space: nowrap;" class=' 2025-02-28'> <span class="event-1 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/export-prices-yoy'>Export Prices YoY</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-negative"> <a href='/singapore/export-prices-yoy'><span id='actual'>-2.2%</span></a> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-3.1%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/export-prices-yoy'></a></span> </td> <td class="calendar-item calendar-item-negative"> <a id='forecast' href='/singapore/export-prices-yoy'>-2.6%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/export-prices-yoy'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374230.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/export-prices-yoy' data-chart='/singapore/export-prices-yoy' title='SG Export Prices YoY' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/import-prices-yoy" data-id="374228" data-country="singapore" data-category="import prices yoy" data-event="import prices yoy" data-symbol='SGPIPY'> <td style="white-space: nowrap;" class=' 2025-02-28'> <span class="event-2 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/import-prices-yoy'>Import Prices YoY</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-negative"> <a href='/singapore/import-prices-yoy'><span id='actual'>-1.3%</span></a> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-3.6%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/import-prices-yoy'></a></span> </td> <td class="calendar-item calendar-item-negative"> <a id='forecast' href='/singapore/import-prices-yoy'>-2.2%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/import-prices-yoy'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374228.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/import-prices-yoy' data-chart='/singapore/import-prices-yoy' title='SG Import Prices YoY' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/producer-prices-change" data-id="374234" data-country="singapore" data-category="producer prices change" data-event="ppi yoy" data-symbol='SINGAPOREPROPRICHA'> <td style="white-space: nowrap;" class=' 2025-02-28'> <span class="event-3 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/producer-prices-change'>PPI YoY</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-positive"> <a href='/singapore/producer-prices-change'><span id='actual'>5.5%</span></a> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>1.5%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/producer-prices-change'></a></span> </td> <td class="calendar-item calendar-item-positive"> <a id='forecast' href='/singapore/producer-prices-change'>3.0%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/producer-prices-change'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374234.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/producer-prices-change' data-chart='/singapore/producer-prices-change' title='SG Producer Prices Change' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl05_th1" class="table-header" data-fixed_copy="1"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Monday March 03 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl05_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="1"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Monday March 03 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/manufacturing-pmi" data-id="374566" data-country="singapore" data-category="manufacturing pmi" data-event="sipmm manufacturing pmi" data-symbol='SINGAPOREMANPMI'> <td style="white-space: nowrap;" class=' 2025-03-03'> <span class="event-4 calendar-date-1"> 01:00 PM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/manufacturing-pmi'>SIPMM Manufacturing PMI</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>50.9</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/manufacturing-pmi'></a></span> </td> <td class="calendar-item calendar-item-positive"> <a id='forecast' href='/singapore/manufacturing-pmi'>50.7</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/manufacturing-pmi'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374566.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/manufacturing-pmi' data-chart='/singapore/manufacturing-pmi' title='SG Manufacturing PMI' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl06_th1" class="table-header" data-fixed_copy="2"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Tuesday March 04 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl06_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="2"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Tuesday March 04 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/3-month-bill-yield" data-id="390335" data-country="singapore" data-category="3 month bill yield" data-event="mas 12-week bill auction" data-symbol='SGPYIELD3M'> <td style="white-space: nowrap;" class=' 2025-03-04'> <span class="event-5 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/3-month-bill-yield'>MAS 12-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>2.85%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/3-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/3-month-bill-yield'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-390335.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/3-month-bill-yield' data-chart='/singapore/3-month-bill-yield' title='SG 3 Month Bill Yield' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/1-month-bill-yield" data-id="390359" data-country="singapore" data-category="1 month bill yield" data-event="mas 4-week bill auction" data-symbol='SGPYIELD1M'> <td style="white-space: nowrap;" class=' 2025-03-04'> <span class="event-6 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/1-month-bill-yield'>MAS 4-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>2.84%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/1-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/1-month-bill-yield'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-390359.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/1-month-bill-yield' data-chart='/singapore/1-month-bill-yield' title='SG 1 Month Bill Yield' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl08_th1" class="table-header" data-fixed_copy="3"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Wednesday March 05 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl08_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="3"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Wednesday March 05 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/composite-pmi" data-id="374619" data-country="singapore" data-category="composite pmi" data-event="s&p global pmi" data-symbol='SINGAPORECOMPMI'> <td style="white-space: nowrap;" class=' 2025-03-05'> <span class="event-7 calendar-date-1"> 12:30 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/composite-pmi'>S&P Global PMI</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>49.9</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/composite-pmi'></a></span> </td> <td class="calendar-item calendar-item-positive"> <a id='forecast' href='/singapore/composite-pmi'>50.5</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/composite-pmi'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374619.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/composite-pmi' data-chart='/singapore/composite-pmi' title='SG Composite PMI' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/retail-sales" data-id="374632" data-country="singapore" data-category="retail sales mom" data-event="retail sales mom" data-symbol='SGPRetailSalesMoM'> <td style="white-space: nowrap;" class=' 2025-03-05'> <span class="event-8 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/retail-sales'>Retail Sales MoM</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-1.5%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/retail-sales'></a></span> </td> <td class="calendar-item calendar-item-positive"> <a id='forecast' href='/singapore/retail-sales'>0.5%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/retail-sales'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374632.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/retail-sales' data-chart='/singapore/retail-sales' title='SG Retail Sales MoM' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/retail-sales-annual" data-id="374631" data-country="singapore" data-category="retail sales yoy" data-event="retail sales yoy" data-symbol='SGPRetailSalesYoY'> <td style="white-space: nowrap;" class=' 2025-03-05'> <span class="event-9 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/retail-sales-annual'>Retail Sales YoY</a> <span class="calendar-reference">JAN</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-2.9%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/retail-sales-annual'></a></span> </td> <td class="calendar-item calendar-item-negative"> <a id='forecast' href='/singapore/retail-sales-annual'>-2.0%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/retail-sales-annual'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374631.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/retail-sales-annual' data-chart='/singapore/retail-sales-annual' title='SG Retail Sales YoY' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl11_th1" class="table-header" data-fixed_copy="4"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Friday March 07 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl11_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="4"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Friday March 07 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/foreign-exchange-reserves" data-id="374845" data-country="singapore" data-category="foreign exchange reserves" data-event="foreign exchange reserves" data-symbol='SINGAPOREFOREXCRES'> <td style="white-space: nowrap;" class=' 2025-03-07'> <span class="event-10 calendar-date-1"> 09:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/foreign-exchange-reserves'>Foreign Exchange Reserves</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>S$510.6B</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/foreign-exchange-reserves'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/foreign-exchange-reserves'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-374845.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/foreign-exchange-reserves' data-chart='/singapore/foreign-exchange-reserves' title='SG Foreign Exchange Reserves' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl12_th1" class="table-header" data-fixed_copy="5"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Monday March 10 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl12_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="5"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Monday March 10 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/unemployment-rate" data-id="375136" data-country="singapore" data-category="unemployment rate" data-event="unemployment rate final" data-symbol='SIQUTOTA'> <td style="white-space: nowrap;" class=' 2025-03-10'> <span class="event-11 calendar-date-1"> 01:45 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/unemployment-rate'>Unemployment Rate Final</a> <span class="calendar-reference">Q4</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>1.9%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/unemployment-rate'>1.9%</a></span> </td> <td class="calendar-item calendar-item-positive"> <a id='forecast' href='/singapore/unemployment-rate'>1.9%</a></span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/unemployment-rate'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375136.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/unemployment-rate' data-chart='/singapore/unemployment-rate' title='SG Unemployment Rate' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl13_th1" class="table-header" data-fixed_copy="6"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Tuesday March 11 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl13_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="6"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Tuesday March 11 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/3-month-bill-yield" data-id="390336" data-country="singapore" data-category="3 month bill yield" data-event="mas 12-week bill auction" data-symbol='SGPYIELD3M'> <td style="white-space: nowrap;" class=' 2025-03-11'> <span class="event-12 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/3-month-bill-yield'>MAS 12-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/3-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/1-month-bill-yield" data-id="390360" data-country="singapore" data-category="1 month bill yield" data-event="mas 4-week bill auction" data-symbol='SGPYIELD1M'> <td style="white-space: nowrap;" class=' 2025-03-11'> <span class="event-13 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/1-month-bill-yield'>MAS 4-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/1-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl15_th1" class="table-header" data-fixed_copy="7"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Thursday March 13 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl15_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="7"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Thursday March 13 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/6-month-bill-yield" data-id="390295" data-country="singapore" data-category="6 month bill yield" data-event="6-month t-bill auction" data-symbol='SGPYIELD6M'> <td style="white-space: nowrap;" class=' 2025-03-13'> <span class="event-14 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/6-month-bill-yield'>6-Month T-Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>2.75%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/6-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/6-month-bill-yield'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-390295.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/6-month-bill-yield' data-chart='/singapore/6-month-bill-yield' title='SG 6 Month Bill Yield' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl16_th1" class="table-header" data-fixed_copy="8"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Monday March 17 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl16_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="8"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Monday March 17 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/balance-of-trade" data-id="375313" data-country="singapore" data-category="balance of trade" data-event="balance of trade" data-symbol='STRDE'> <td style="white-space: nowrap;" class=' 2025-03-17'> <span class="event-15 calendar-date-1"> 12:40 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/balance-of-trade'>Balance of Trade</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>$2.93B</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/balance-of-trade'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/balance-of-trade'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375313.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/balance-of-trade' data-chart='/singapore/balance-of-trade' title='SG Balance of Trade' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl17_th1" class="table-header" data-fixed_copy="9"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Tuesday March 18 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl17_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="9"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Tuesday March 18 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/exports-of-non-oil-domestic-exports-of" data-id="375311" data-country="singapore" data-category="exports of non-oil domestic exports of" data-event="non-oil exports mom" data-symbol='SPEXPNOOA'> <td style="white-space: nowrap;" class=' 2025-03-18'> <span class="event-16 calendar-date-1"> 12:30 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/exports-of-non-oil-domestic-exports-of'>Non-Oil Exports MoM</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-3.3%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/exports-of-non-oil-domestic-exports-of'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/exports-of-non-oil-domestic-exports-of'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375311.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/exports-of-non-oil-domestic-exports-of' data-chart='/singapore/exports-of-non-oil-domestic-exports-of' title='SG Exports of Non-oil Domestic Exports Of' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/domestic-exports-of-non-oil-nodx-pctyoy" data-id="375312" data-country="singapore" data-category="domestic exports of non oil (nodx) (%yoy)" data-event="non-oil exports yoy" data-symbol='SPEXPNOOR'> <td style="white-space: nowrap;" class=' 2025-03-18'> <span class="event-17 calendar-date-1"> 12:30 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/domestic-exports-of-non-oil-nodx-pctyoy'>Non-Oil Exports YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-2.1%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/domestic-exports-of-non-oil-nodx-pctyoy'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/domestic-exports-of-non-oil-nodx-pctyoy'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375312.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/domestic-exports-of-non-oil-nodx-pctyoy' data-chart='/singapore/domestic-exports-of-non-oil-nodx-pctyoy' title='SG Domestic Exports of Non Oil (nodx) (%yoy)' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/3-month-bill-yield" data-id="390337" data-country="singapore" data-category="3 month bill yield" data-event="mas 12-week bill auction" data-symbol='SGPYIELD3M'> <td style="white-space: nowrap;" class=' 2025-03-18'> <span class="event-18 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/3-month-bill-yield'>MAS 12-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/3-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/1-month-bill-yield" data-id="390361" data-country="singapore" data-category="1 month bill yield" data-event="mas 4-week bill auction" data-symbol='SGPYIELD1M'> <td style="white-space: nowrap;" class=' 2025-03-18'> <span class="event-19 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/1-month-bill-yield'>MAS 4-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/1-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl21_th1" class="table-header" data-fixed_copy="10"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Monday March 24 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl21_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="10"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Monday March 24 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/core-inflation-rate" data-id="375613" data-country="singapore" data-category="core inflation rate" data-event="core inflation rate yoy" data-symbol='SGPCORECPIRATE'> <td style="white-space: nowrap;" class=' 2025-03-24'> <span class="event-20 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/core-inflation-rate'>Core Inflation Rate YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>0.8%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/core-inflation-rate'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/core-inflation-rate'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375613.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/core-inflation-rate' data-chart='/singapore/core-inflation-rate' title='SG Core Inflation Rate' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/inflation-rate-mom" data-id="375616" data-country="singapore" data-category="inflation rate mom" data-event="inflation rate mom" data-symbol='SINGAPOREINFRATMOM'> <td style="white-space: nowrap;" class=' 2025-03-24'> <span class="event-21 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/inflation-rate-mom'>Inflation Rate MoM</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-0.7%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/inflation-rate-mom'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/inflation-rate-mom'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375616.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/inflation-rate-mom' data-chart='/singapore/inflation-rate-mom' title='SG Inflation Rate Mom' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/inflation-cpi" data-id="375615" data-country="singapore" data-category="inflation rate" data-event="inflation rate yoy" data-symbol='SICPIYOY'> <td style="white-space: nowrap;" class=' 2025-03-24'> <span class="event-22 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/inflation-cpi'>Inflation Rate YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>1.2%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/inflation-cpi'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/inflation-cpi'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375615.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/inflation-cpi' data-chart='/singapore/inflation-cpi' title='SG Inflation Rate' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl24_th1" class="table-header" data-fixed_copy="11"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Tuesday March 25 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl24_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="11"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Tuesday March 25 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/3-month-bill-yield" data-id="390338" data-country="singapore" data-category="3 month bill yield" data-event="mas 12-week bill auction" data-symbol='SGPYIELD3M'> <td style="white-space: nowrap;" class=' 2025-03-25'> <span class="event-23 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/3-month-bill-yield'>MAS 12-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/3-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/1-month-bill-yield" data-id="390362" data-country="singapore" data-category="1 month bill yield" data-event="mas 4-week bill auction" data-symbol='SGPYIELD1M'> <td style="white-space: nowrap;" class=' 2025-03-25'> <span class="event-24 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/1-month-bill-yield'>MAS 4-Week Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/1-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl26_th1" class="table-header" data-fixed_copy="12"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Wednesday March 26 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl26_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="12"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Wednesday March 26 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/5-year-bond-yield" data-id="390324" data-country="singapore" data-category="5 year bond yield" data-event="5-year bond auction" data-symbol='SGPGB5'> <td style="white-space: nowrap;" class=' 2025-03-26'> <span class="event-25 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/5-year-bond-yield'>5-Year Bond Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>2.56%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/5-year-bond-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/5-year-bond-yield'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-390324.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/5-year-bond-yield' data-chart='/singapore/5-year-bond-yield' title='SG 5 Year Bond Yield' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/6-month-bill-yield" data-id="390296" data-country="singapore" data-category="6 month bill yield" data-event="6-month t-bill auction" data-symbol='SGPYIELD6M'> <td style="white-space: nowrap;" class=' 2025-03-26'> <span class="event-26 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/6-month-bill-yield'>6-Month T-Bill Auction</a> <span class="calendar-reference"></span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'></span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/6-month-bill-yield'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td></td> <td class='td-alert'> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/industrial-production-mom" data-id="375664" data-country="singapore" data-category="industrial production mom" data-event="industrial production mom" data-symbol='SINGAPOREINDPROMOM'> <td style="white-space: nowrap;" class=' 2025-03-26'> <span class="event-27 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/industrial-production-mom'>Industrial Production MoM</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>4.5%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/industrial-production-mom'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/industrial-production-mom'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375664.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/industrial-production-mom' data-chart='/singapore/industrial-production-mom' title='SG Industrial Production Mom' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/industrial-production" data-id="375663" data-country="singapore" data-category="industrial production" data-event="industrial production yoy" data-symbol='SIIPYOYPCT'> <td style="white-space: nowrap;" class=' 2025-03-26'> <span class="event-28 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/industrial-production'>Industrial Production YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>9.1%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/industrial-production'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/industrial-production'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375663.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/industrial-production' data-chart='/singapore/industrial-production' title='SG Industrial Production' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl30_th1" class="table-header" data-fixed_copy="13"> <tr style="white-space: nowrap"> <th colspan='3' style='text-align: left;'> Friday March 28 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <!-- copy of table head to show on scroll --> <thead id="ctl00_ContentPlaceHolder1_ctl00_Repeater1_ctl30_th2" class="hidden-head" style="position: fixed; top: 0; display: none; z-index: 1001;" data-id="13"> <tr style="white-space: nowrap;"> <th colspan='3' style='text-align: left;'> Friday March 28 2025 </th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Actual</th> <th style="text-align: center; font-weight: normal; min-width: 75px;"> Previous</th> <th style="text-align: center; font-weight: normal;"> Consensus</th> <th style="text-align: center; font-weight: normal;"> Forecast</th> <th></th> <th></th> </tr> </thead> <tr data-url="/singapore/loans-to-private-sector" data-id="375787" data-country="singapore" data-category="loans to private sector" data-event="bank lending" data-symbol='SINGAPORELOATOPRISEC'> <td style="white-space: nowrap;" class=' 2025-03-28'> <span class="event-29 calendar-date-1"> 02:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/loans-to-private-sector'>Bank Lending</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>S$836.3B</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/loans-to-private-sector'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/loans-to-private-sector'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375787.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/loans-to-private-sector' data-chart='/singapore/loans-to-private-sector' title='SG Loans to Private Sector' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/export-prices-yoy" data-id="375797" data-country="singapore" data-category="export prices yoy" data-event="export prices yoy" data-symbol='SGPEPY'> <td style="white-space: nowrap;" class=' 2025-03-28'> <span class="event-30 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/export-prices-yoy'>Export Prices YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-2.2%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/export-prices-yoy'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/export-prices-yoy'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375797.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/export-prices-yoy' data-chart='/singapore/export-prices-yoy' title='SG Export Prices YoY' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/import-prices-yoy" data-id="375796" data-country="singapore" data-category="import prices yoy" data-event="import prices yoy" data-symbol='SGPIPY'> <td style="white-space: nowrap;" class=' 2025-03-28'> <span class="event-31 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/import-prices-yoy'>Import Prices YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-negative"> <span id='previous'>-1.3%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/import-prices-yoy'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/import-prices-yoy'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375796.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/import-prices-yoy' data-chart='/singapore/import-prices-yoy' title='SG Import Prices YoY' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> <!-- copy of table head to show on scroll --> <tr data-url="/singapore/producer-prices-change" data-id="375795" data-country="singapore" data-category="producer prices change" data-event="ppi yoy" data-symbol='SINGAPOREPROPRICHA'> <td style="white-space: nowrap;" class=' 2025-03-28'> <span class="event-32 calendar-date-1"> 05:00 AM </span> </td> <td class="calendar-item" style="white-space: nowrap"> <table style="padding: 0px;"> <tr> <td style="padding-left: 5px;"> <div title="Singapore" class='flag flag-sg'></div> </td> <td title="Singapore" style="padding-left: 5px;" class="calendar-iso">SG</td> </tr> </table> </td> <td style="max-width: 250px; overflow-x: hidden;"> <a class='calendar-event' href='/singapore/producer-prices-change'>PPI YoY</a> <span class="calendar-reference">FEB</span> </td> <td class="calendar-item calendar-item-positive"> <span id='actual'></span> </td> <td class="calendar-item calendar-item-positive"> <span id='previous'>5.5%</span> <span id='revised' style="cursor: pointer; color: #333; font-size: 10px;" data-bs-toggle="tooltip" title=> </span> </td> <td class="calendar-item calendar-item-positive"> <a id='consensus' href='/singapore/producer-prices-change'></a></span> </td> <td class="calendar-item calendar-item-positive"> </span> </td> <td class='d-none d-lg-table-cell' style='text-align: right'><a target='_blank' style='text-align: center' href='/singapore/producer-prices-change'><div class='lazy' style='height: 20px; width: 40px;' data-src='https://d3fy651gv2fhd3.cloudfront.net/charts/calendar-375795.png?h=20&w=40&n=4&y=0&y2=0&x=0&title=false&lbl=0&bg=0&v=V20230410&url=/singapore/producer-prices-change' data-chart='/singapore/producer-prices-change' title='SG Producer Prices Change' data-placement='right'></div></a></td> <td class='td-alert'> <div title='Create Alert' data-type='te-alert-hook' class='bi bi-bell-fill te-alert-bell'></div> </td> </tr> </table> </div> <br /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Countries" id="ctl00_ContentPlaceHolder1_ctl00_Countries" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Country" id="ctl00_ContentPlaceHolder1_ctl00_Country" value="singapore" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Category" id="ctl00_ContentPlaceHolder1_ctl00_Category" value="calendar" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Event" id="ctl00_ContentPlaceHolder1_ctl00_Event" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Importance" id="ctl00_ContentPlaceHolder1_ctl00_Importance" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$IsDates" id="ctl00_ContentPlaceHolder1_ctl00_IsDates" value="0" /> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl00$Lookback" id="ctl00_ContentPlaceHolder1_ctl00_Lookback" value="72" /> <br /> <br /> <div id="ctl00_ContentPlaceHolder1_ctl00_divAbout" class="card"> <div class="card-header">About our calendar</div> <div class="card-body" style="text-align: justify"> <br /> Trading Economics provides its users with a near real-time economic calendar updated 24 hours a day. <b>Actual values</b> are based on official sources, not third party data providers. <b>Previous values</b> are available before an economic indicator is reported and marked as revised (*) accordingly. <b>Survey consensus</b> figures are provided displaying the average forecast among a representative group of economists. We also provide <b>forecasts</b> which are driven by our analysts’ expectations and technically projected using an autoregressive integrated moving average (ARIMA) model. <br /> <br /> The event release time is colored according to its importance.<br /> <span class="btn btn-outline-secondary btn-xs" style="border-color: #e3e3e3; background-color: #fff; color: #000">Low</span> <span class="btn btn-outline-secondary btn-xs bold">Medium</span> <span class="btn btn-danger btn-xs bold">High</span> <br /> <br /> The Trading Economics <b>API</b> provides you with <b>direct access</b> to our calendar and historical data on thousands of indicators. The API can be used to feed a website, off-the-shelf software like Microsoft Excel or a custom developed application. Providing several request methods to query our databases, it is the best way to export data in XML, CSV or JSON format and to keep your events calendar up to date. <br /> <br /> To learn more about our calendar API <a href="../api/?source=calendar" target="_blank" style="text-decoration: underline">click here</a>. <br /> <br /> </div> </div> <br /> <br /> <style>.news-link {padding-bottom: 5px;}</style> <div id="ctl00_ContentPlaceHolder1_ctl04_DivArticles"> <div class="row"> <div id="ctl00_ContentPlaceHolder1_ctl04_tdRelatedNews" class="col-md-6"> <div class="card"> <div class="card-header">Related</div> <div class="card-body"> <div class="news-link"><a href='/singapore/producer-prices-change'>Singapore Producer Inflation Hits Over 2-Year High</a></div> <div class="news-link"><a href='/singapore/loans-to-private-sector'>Singapore Bank Lending Largest Since 2022</a></div> <div class="news-link"><a href='/singapore/industrial-production'>Singapore Manufacturing Rises Less than Expected</a></div> <div class="news-link"><a href='/singapore/food-inflation'>Singapore Food Prices Ease</a></div> <div class="news-link"><a href='/singapore/core-inflation-rate'>Singapore Core Inflation Slows to Over 3-1/2-Year Low</a></div> <div class="news-link"><a href='/singapore/inflation-cpi'>Singapore Inflation Rate Lowest in Near 4 Years</a></div> <div class="news-link"><a href='/singapore/domestic-exports-of-non-oil-nodx-pctyoy'>Singapore NODX Falls Less than Expected</a></div> <div class="news-link"><a href='/singapore/current-account'>Singapore Current Account Surplus Widens in 2024</a></div> <div class="news-link"><a href='/singapore/gdp-growth-annual'>Singapore Economy Expands 5% in Q4</a></div> <div class="news-link"><a href='/singapore/foreign-exchange-reserves'>Singapore Forex Reserves Rise to Nearly 3-Year High</a></div> <br /> <a id="ctl00_ContentPlaceHolder1_ctl04_moreNews" href="news"> <div class="btn-group btn-group-sm"> <button type="button" class="btn btn-outline-secondary"> <i class="bi bi-plus-lg"></i> </button> </div> </a> </div> </div> </div> <div class="col-md-6"> <div id="ctl00_ContentPlaceHolder1_ctl04_tdTopNews"> <div class="card"> <div class="card-header">Latest</div> <div class="card-body"> <div class="news-link"><a href='/united-states/stock-market'>US Futures Edge Higher to Start the Month</a></div> <div class="news-link"><a href='/australia/mi-inflation-gauge-mom'>Australia MI Inflation Gauge Falls for First Time in 6 Months</a></div> <div class="news-link"><a href='/bahrain/inflation-cpi'>Bahrain Consumer Prices Unchanged in January</a></div> <div class="news-link"><a href='/new-zealand/stock-market'>New Zealand Stocks Fall to Start the Week</a></div> <div class="news-link"><a href='/australia/manufacturing-pmi'>Australia Manufacturing PMI Revised Slightly Down: S&P Global</a></div> <div class="news-link"><a href='/portugal/rating'>S&P Upgrades Portugal’s Rating to ‘A’</a></div> <div class="news-link"><a href='/china/non-manufacturing-pmi'>China Services Growth Beats Estimates</a></div> <div class="news-link"><a href='/china/business-confidence'>China Factory Activity Unexpectedly Expands</a></div> <div class="news-link"><a href='/china/nbs-general-pmi'>China Composite PMI Edges Higher</a></div> <div class="news-link"><a href='/south-korea/imports-yoy'>South Korea Imports Unexpectedly Rise</a></div> <br /> <a id="ctl00_ContentPlaceHolder1_ctl04_moreTopNews" href="../stream"> <div class="btn-group btn-group-sm"> <button type="button" class="btn btn-outline-secondary"> <i class="bi bi-plus-lg"></i> </button> </div> </a> </div> </div> </div> </div> </div> </div> <br /> <br /> <h1 class='te-title-footer'>Singapore Calendar</h1><h2 id='summary' class='te-description-footer'>Trading Economics provides data for 20 million economic indicators from 196 countries including actual values, consensus figures, forecasts, historical time series and news. Singapore Calendar - was last updated on Monday, March 3, 2025.</h2><br/> </div> <div id="ctl00_rightSideMenu" class="col-xl-4 col-lg-4"> <style>#sidebar {padding-left: 2px; padding-right: 2px;} #sidebar .accordion-header{border-radius: 0;}</style> <div id="sidebar"> <div id="PanelAllMenus"> <div id="ctl00_LeftSideMenuContainer1_ctl00_countrySelectionPanel" style="padding-bottom: 5px;"> <select id="SelectCountries" class="form-select" onchange="window.location=this.options[this.selectedIndex].value"> <option value="" selected="selected"> Singapore </option> <option value="/united-states/calendar">United States</option> <option value="/united-kingdom/calendar">United Kingdom</option> <option value="/euro-area/calendar">Euro area</option> <option value="/china/calendar">China</option> <option value="/afghanistan/calendar">Afghanistan</option> <option value="/albania/calendar">Albania</option> <option value="/algeria/calendar">Algeria</option> <option value="/andorra/calendar">Andorra</option> <option value="/angola/calendar">Angola</option> <option value="/antigua-and-barbuda/calendar">Antigua and Barbuda</option> <option value="/argentina/calendar">Argentina</option> <option value="/armenia/calendar">Armenia</option> <option value="/aruba/calendar">Aruba</option> <option value="/australia/calendar">Australia</option> <option value="/austria/calendar">Austria</option> <option value="/azerbaijan/calendar">Azerbaijan</option> <option value="/bahamas/calendar">Bahamas</option> <option value="/bahrain/calendar">Bahrain</option> <option value="/bangladesh/calendar">Bangladesh</option> <option value="/barbados/calendar">Barbados</option> <option value="/belarus/calendar">Belarus</option> <option value="/belgium/calendar">Belgium</option> <option value="/belize/calendar">Belize</option> <option value="/benin/calendar">Benin</option> <option value="/bermuda/calendar">Bermuda</option> <option value="/bhutan/calendar">Bhutan</option> <option value="/bolivia/calendar">Bolivia</option> <option value="/bosnia-and-herzegovina/calendar">Bosnia</option> <option value="/botswana/calendar">Botswana</option> <option value="/brazil/calendar">Brazil</option> <option value="/brunei/calendar">Brunei</option> <option value="/bulgaria/calendar">Bulgaria</option> <option value="/burkina-faso/calendar">Burkina Faso</option> <option value="/burundi/calendar">Burundi</option> <option value="/cambodia/calendar">Cambodia</option> <option value="/cameroon/calendar">Cameroon</option> <option value="/canada/calendar">Canada</option> <option value="/cape-verde/calendar">Cape Verde</option> <option value="/cayman-islands/calendar">Cayman Islands</option> <option value="/central-african-republic/calendar">Central African Republic</option> <option value="/chad/calendar">Chad</option> <option value="/channel-islands/calendar">Channel Islands</option> <option value="/chile/calendar">Chile</option> <option value="/china/calendar">China</option> <option value="/colombia/calendar">Colombia</option> <option value="/comoros/calendar">Comoros</option> <option value="/congo/calendar">Congo</option> <option value="/costa-rica/calendar">Costa Rica</option> <option value="/cote-d-ivoire/calendar">Cote d Ivoire</option> <option value="/croatia/calendar">Croatia</option> <option value="/cuba/calendar">Cuba</option> <option value="/cyprus/calendar">Cyprus</option> <option value="/czech-republic/calendar">Czech Republic</option> <option value="/denmark/calendar">Denmark</option> <option value="/djibouti/calendar">Djibouti</option> <option value="/dominica/calendar">Dominica</option> <option value="/dominican-republic/calendar">Dominican Republic</option> <option value="/east-asia-and-pacific/calendar">East Asia and Pacific</option> <option value="/east-timor/calendar">East Timor</option> <option value="/ecuador/calendar">Ecuador</option> <option value="/egypt/calendar">Egypt</option> <option value="/el-salvador/calendar">El Salvador</option> <option value="/equatorial-guinea/calendar">Equatorial Guinea</option> <option value="/eritrea/calendar">Eritrea</option> <option value="/estonia/calendar">Estonia</option> <option value="/ethiopia/calendar">Ethiopia</option> <option value="/euro-area/calendar">Euro area</option> <option value="/european-union/calendar">European Union</option> <option value="/europe-and-central-asia/calendar">Europe and Central Asia</option> <option value="/faeroe-islands/calendar">Faeroe Islands</option> <option value="/fiji/calendar">Fiji</option> <option value="/finland/calendar">Finland</option> <option value="/france/calendar">France</option> <option value="/french-polynesia/calendar">French Polynesia</option> <option value="/gabon/calendar">Gabon</option> <option value="/gambia/calendar">Gambia</option> <option value="/georgia/calendar">Georgia</option> <option value="/germany/calendar">Germany</option> <option value="/ghana/calendar">Ghana</option> <option value="/greece/calendar">Greece</option> <option value="/greenland/calendar">Greenland</option> <option value="/grenada/calendar">Grenada</option> <option value="/guam/calendar">Guam</option> <option value="/guatemala/calendar">Guatemala</option> <option value="/guinea/calendar">Guinea</option> <option value="/guinea-bissau/calendar">Guinea Bissau</option> <option value="/guyana/calendar">Guyana</option> <option value="/haiti/calendar">Haiti</option> <option value="/honduras/calendar">Honduras</option> <option value="/hong-kong/calendar">Hong Kong</option> <option value="/hungary/calendar">Hungary</option> <option value="/iceland/calendar">Iceland</option> <option value="/india/calendar">India</option> <option value="/indonesia/calendar">Indonesia</option> <option value="/iran/calendar">Iran</option> <option value="/iraq/calendar">Iraq</option> <option value="/ireland/calendar">Ireland</option> <option value="/isle-of-man/calendar">Isle of Man</option> <option value="/israel/calendar">Israel</option> <option value="/italy/calendar">Italy</option> <option value="/ivory-coast/calendar">Ivory Coast</option> <option value="/jamaica/calendar">Jamaica</option> <option value="/japan/calendar">Japan</option> <option value="/jordan/calendar">Jordan</option> <option value="/kazakhstan/calendar">Kazakhstan</option> <option value="/kenya/calendar">Kenya</option> <option value="/kiribati/calendar">Kiribati</option> <option value="/kosovo/calendar">Kosovo</option> <option value="/kuwait/calendar">Kuwait</option> <option value="/kyrgyzstan/calendar">Kyrgyzstan</option> <option value="/laos/calendar">Laos</option> <option value="/latvia/calendar">Latvia</option> <option value="/lebanon/calendar">Lebanon</option> <option value="/lesotho/calendar">Lesotho</option> <option value="/liberia/calendar">Liberia</option> <option value="/libya/calendar">Libya</option> <option value="/liechtenstein/calendar">Liechtenstein</option> <option value="/lithuania/calendar">Lithuania</option> <option value="/luxembourg/calendar">Luxembourg</option> <option value="/macau/calendar">Macau</option> <option value="/macedonia/calendar">Macedonia</option> <option value="/madagascar/calendar">Madagascar</option> <option value="/malawi/calendar">Malawi</option> <option value="/malaysia/calendar">Malaysia</option> <option value="/maldives/calendar">Maldives</option> <option value="/mali/calendar">Mali</option> <option value="/malta/calendar">Malta</option> <option value="/marshall-islands/calendar">Marshall Islands</option> <option value="/mauritania/calendar">Mauritania</option> <option value="/mauritius/calendar">Mauritius</option> <option value="/mayotte/calendar">Mayotte</option> <option value="/mexico/calendar">Mexico</option> <option value="/micronesia/calendar">Micronesia</option> <option value="/moldova/calendar">Moldova</option> <option value="/monaco/calendar">Monaco</option> <option value="/mongolia/calendar">Mongolia</option> <option value="/montenegro/calendar">Montenegro</option> <option value="/morocco/calendar">Morocco</option> <option value="/mozambique/calendar">Mozambique</option> <option value="/myanmar/calendar">Myanmar</option> <option value="/namibia/calendar">Namibia</option> <option value="/nepal/calendar">Nepal</option> <option value="/netherlands/calendar">Netherlands</option> <option value="/netherlands-antilles/calendar">Netherlands Antilles</option> <option value="/new-caledonia/calendar">New Caledonia</option> <option value="/new-zealand/calendar">New Zealand</option> <option value="/nicaragua/calendar">Nicaragua</option> <option value="/niger/calendar">Niger</option> <option value="/nigeria/calendar">Nigeria</option> <option value="/north-korea/calendar">North Korea</option> <option value="/norway/calendar">Norway</option> <option value="/oman/calendar">Oman</option> <option value="/pakistan/calendar">Pakistan</option> <option value="/palau/calendar">Palau</option> <option value="/panama/calendar">Panama</option> <option value="/palestine/calendar">Palestine</option> <option value="/papua-new-guinea/calendar">Papua New Guinea</option> <option value="/paraguay/calendar">Paraguay</option> <option value="/peru/calendar">Peru</option> <option value="/philippines/calendar">Philippines</option> <option value="/poland/calendar">Poland</option> <option value="/portugal/calendar">Portugal</option> <option value="/puerto-rico/calendar">Puerto Rico</option> <option value="/qatar/calendar">Qatar</option> <option value="/republic-of-the-congo/calendar">Republic of the Congo</option> <option value="/romania/calendar">Romania</option> <option value="/russia/calendar">Russia</option> <option value="/rwanda/calendar">Rwanda</option> <option value="/samoa/calendar">Samoa</option> <option value="/sao-tome-and-principe/calendar">Sao Tome and Principe</option> <option value="/saudi-arabia/calendar">Saudi Arabia</option> <option value="/senegal/calendar">Senegal</option> <option value="/serbia/calendar">Serbia</option> <option value="/seychelles/calendar">Seychelles</option> <option value="/sierra-leone/calendar">Sierra Leone</option> <option value="/singapore/calendar">Singapore</option> <option value="/slovakia/calendar">Slovakia</option> <option value="/slovenia/calendar">Slovenia</option> <option value="/solomon-islands/calendar">Solomon Islands</option> <option value="/somalia/calendar">Somalia</option> <option value="/south-africa/calendar">South Africa</option> <option value="/south-asia/calendar">South Asia</option> <option value="/south-korea/calendar">South Korea</option> <option value="/south-sudan/calendar">South Sudan</option> <option value="/spain/calendar">Spain</option> <option value="/sri-lanka/calendar">Sri Lanka</option> <option value="/sudan/calendar">Sudan</option> <option value="/suriname/calendar">Suriname</option> <option value="/swaziland/calendar">Swaziland</option> <option value="/sweden/calendar">Sweden</option> <option value="/switzerland/calendar">Switzerland</option> <option value="/syria/calendar">Syria</option> <option value="/taiwan/calendar">Taiwan</option> <option value="/tajikistan/calendar">Tajikistan</option> <option value="/tanzania/calendar">Tanzania</option> <option value="/thailand/calendar">Thailand</option> <option value="/timor-leste/calendar">Timor Leste</option> <option value="/togo/calendar">Togo</option> <option value="/tonga/calendar">Tonga</option> <option value="/trinidad-and-tobago/calendar">Trinidad and Tobago</option> <option value="/tunisia/calendar">Tunisia</option> <option value="/turkey/calendar">Turkey</option> <option value="/turkmenistan/calendar">Turkmenistan</option> <option value="/uganda/calendar">Uganda</option> <option value="/ukraine/calendar">Ukraine</option> <option value="/united-arab-emirates/calendar">United Arab Emirates</option> <option value="/united-kingdom/calendar">United Kingdom</option> <option value="/united-states/calendar">United States</option> <option value="/uruguay/calendar">Uruguay</option> <option value="/uzbekistan/calendar">Uzbekistan</option> <option value="/vanuatu/calendar">Vanuatu</option> <option value="/venezuela/calendar">Venezuela</option> <option value="/vietnam/calendar">Vietnam</option> <option value="/virgin-islands/calendar">Virgin Islands</option> <option value="/yemen/calendar">Yemen</option> <option value="/zambia/calendar">Zambia</option> <option value="/zimbabwe/calendar">Zimbabwe</option> </select> </div> <div id="accordion" class="accordion accordion-flush"> <div class="card"> <div class="card-header"> <span class="card-title"> <a data-bs-toggle="collapse" data-parent="#accordion" href="#calendar-div" class="collapsed" aria-expanded="false"> <b class="dropdown-toggle"></b> Calendar </a> </span> </div> <div id="calendar-div" class="panel-collapse collapse in"> <div class="card-body"> <a href="/calendar">Economic Indicators</a><br /> <a href="/earnings">Stock Earnings</a><br /> <a href="/holidays">Public Holidays</a><br /> </div> </div> </div> <div id="ctl00_LeftSideMenuContainer1_ctl00_mainPanel" class="accordion-item"> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater0_ctl01_HyperLink1" href="/singapore/calendar">Calendar<br /> </a> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater0_ctl02_HyperLink1" href="/singapore/forecast">Forecast<br /> </a> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater0_ctl03_HyperLink1" href="/singapore/indicators">Indicators<br /> </a> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater0_ctl04_HyperLink1" href="/singapore/news">News<br /> </a> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#0" aria-expanded="false" aria-controls="0"> <b class="dropdown-toggle"></b> Markets </button> </h2> <div id="0" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl00_Repeater2_ctl00_HyperLink2" href="/singapore/currency" style="text-decoration: none; text-transform: capitalize;">Currency</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl00_Repeater2_ctl01_HyperLink2" href="/singapore/government-bond-yield" style="text-decoration: none; text-transform: capitalize;">Government Bond 10Y</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl00_Repeater2_ctl02_HyperLink2" href="/singapore/stock-market" style="text-decoration: none; text-transform: capitalize;">Stock Market</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#1" aria-expanded="false" aria-controls="1"> <b class="dropdown-toggle"></b> GDP </button> </h2> <div id="1" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl00_HyperLink2" href="/singapore/full-year-gdp-growth" style="text-decoration: none; text-transform: capitalize;">Full Year GDP Growth</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl01_HyperLink2" href="/singapore/gdp" style="text-decoration: none; text-transform: capitalize;">GDP</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl02_HyperLink2" href="/singapore/gdp-constant-prices" style="text-decoration: none; text-transform: capitalize;">GDP Constant Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl03_HyperLink2" href="/singapore/gdp-from-construction" style="text-decoration: none; text-transform: capitalize;">GDP from Construction</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl04_HyperLink2" href="/singapore/gdp-from-manufacturing" style="text-decoration: none; text-transform: capitalize;">GDP from Manufacturing</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl05_HyperLink2" href="/singapore/gdp-from-services" style="text-decoration: none; text-transform: capitalize;">GDP from Services</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl06_HyperLink2" href="/singapore/gdp-from-transport" style="text-decoration: none; text-transform: capitalize;">GDP from Transport</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl07_HyperLink2" href="/singapore/gdp-from-utilities" style="text-decoration: none; text-transform: capitalize;">GDP from Utilities</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl08_HyperLink2" href="/singapore/gdp-growth-annualized" style="text-decoration: none; text-transform: capitalize;">GDP Growth Annualized</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl09_HyperLink2" href="/singapore/gdp-growth" style="text-decoration: none; text-transform: capitalize;">GDP Growth Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl10_HyperLink2" href="/singapore/gdp-growth-annual" style="text-decoration: none; text-transform: capitalize;">GDP Growth Rate YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl11_HyperLink2" href="/singapore/gdp-per-capita" style="text-decoration: none; text-transform: capitalize;">GDP per Capita</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl12_HyperLink2" href="/singapore/gdp-per-capita-ppp" style="text-decoration: none; text-transform: capitalize;">GDP per Capita PPP</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl13_HyperLink2" href="/singapore/gross-fixed-capital-formation" style="text-decoration: none; text-transform: capitalize;">Gross Fixed Capital Formation</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl01_Repeater2_ctl14_HyperLink2" href="/singapore/gross-national-product" style="text-decoration: none; text-transform: capitalize;">Gross National Product</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#2" aria-expanded="false" aria-controls="2"> <b class="dropdown-toggle"></b> Labour </button> </h2> <div id="2" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl00_HyperLink2" href="/singapore/average-weekly-hours" style="text-decoration: none; text-transform: capitalize;">Average Weekly Hours</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl01_HyperLink2" href="/singapore/employed-persons" style="text-decoration: none; text-transform: capitalize;">Employed Persons</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl02_HyperLink2" href="/singapore/employment-change" style="text-decoration: none; text-transform: capitalize;">Employment Change</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl03_HyperLink2" href="/singapore/job-vacancies" style="text-decoration: none; text-transform: capitalize;">Job Vacancies</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl04_HyperLink2" href="/singapore/labor-force-participation-rate" style="text-decoration: none; text-transform: capitalize;">Labor Force Participation Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl05_HyperLink2" href="/singapore/labour-costs" style="text-decoration: none; text-transform: capitalize;">Labour Costs</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl06_HyperLink2" href="/singapore/population" style="text-decoration: none; text-transform: capitalize;">Population</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl07_HyperLink2" href="/singapore/productivity" style="text-decoration: none; text-transform: capitalize;">Productivity</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl08_HyperLink2" href="/singapore/retirement-age-men" style="text-decoration: none; text-transform: capitalize;">Retirement Age Men</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl09_HyperLink2" href="/singapore/retirement-age-women" style="text-decoration: none; text-transform: capitalize;">Retirement Age Women</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl10_HyperLink2" href="/singapore/unemployed-persons" style="text-decoration: none; text-transform: capitalize;">Unemployed Persons</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl11_HyperLink2" href="/singapore/unemployment-rate" style="text-decoration: none; text-transform: capitalize;">Unemployment Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl02_Repeater2_ctl12_HyperLink2" href="/singapore/wages" style="text-decoration: none; text-transform: capitalize;">Wages</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#3" aria-expanded="false" aria-controls="3"> <b class="dropdown-toggle"></b> Prices </button> </h2> <div id="3" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl00_HyperLink2" href="/singapore/core-consumer-prices" style="text-decoration: none; text-transform: capitalize;">Core Consumer Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl01_HyperLink2" href="/singapore/core-inflation-rate" style="text-decoration: none; text-transform: capitalize;">Core Inflation Rate YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl02_HyperLink2" href="/singapore/consumer-price-index-cpi" style="text-decoration: none; text-transform: capitalize;">CPI</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl03_HyperLink2" href="/singapore/cpi-housing-utilities" style="text-decoration: none; text-transform: capitalize;">CPI Housing Utilities</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl04_HyperLink2" href="/singapore/cpi-transportation" style="text-decoration: none; text-transform: capitalize;">CPI Transportation</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl05_HyperLink2" href="/singapore/export-prices" style="text-decoration: none; text-transform: capitalize;">Export Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl06_HyperLink2" href="/singapore/export-prices-yoy" style="text-decoration: none; text-transform: capitalize;">Export Prices YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl07_HyperLink2" href="/singapore/food-inflation" style="text-decoration: none; text-transform: capitalize;">Food Inflation</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl08_HyperLink2" href="/singapore/gdp-deflator" style="text-decoration: none; text-transform: capitalize;">GDP Deflator</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl09_HyperLink2" href="/singapore/import-prices" style="text-decoration: none; text-transform: capitalize;">Import Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl10_HyperLink2" href="/singapore/import-prices-yoy" style="text-decoration: none; text-transform: capitalize;">Import Prices YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl11_HyperLink2" href="/singapore/inflation-rate-mom" style="text-decoration: none; text-transform: capitalize;">Inflation Rate MoM</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl12_HyperLink2" href="/singapore/inflation-cpi" style="text-decoration: none; text-transform: capitalize;">Inflation Rate YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl13_HyperLink2" href="/singapore/producer-prices-change" style="text-decoration: none; text-transform: capitalize;">PPI YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl03_Repeater2_ctl14_HyperLink2" href="/singapore/producer-prices" style="text-decoration: none; text-transform: capitalize;">Producer Prices</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#4" aria-expanded="false" aria-controls="4"> <b class="dropdown-toggle"></b> Money </button> </h2> <div id="4" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl00_HyperLink2" href="/singapore/loans-to-private-sector" style="text-decoration: none; text-transform: capitalize;">Bank Lending</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl01_HyperLink2" href="/singapore/banks-balance-sheet" style="text-decoration: none; text-transform: capitalize;">Banks Balance Sheet</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl02_HyperLink2" href="/singapore/central-bank-balance-sheet" style="text-decoration: none; text-transform: capitalize;">Central Bank Balance Sheet</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl03_HyperLink2" href="/singapore/foreign-exchange-reserves" style="text-decoration: none; text-transform: capitalize;">Foreign Exchange Reserves</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl04_HyperLink2" href="/singapore/interbank-rate" style="text-decoration: none; text-transform: capitalize;">Interbank Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl05_HyperLink2" href="/singapore/interest-rate" style="text-decoration: none; text-transform: capitalize;">Monetary Policy Statement</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl06_HyperLink2" href="/singapore/money-supply-m0" style="text-decoration: none; text-transform: capitalize;">Money Supply M0</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl07_HyperLink2" href="/singapore/money-supply-m1" style="text-decoration: none; text-transform: capitalize;">Money Supply M1</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl08_HyperLink2" href="/singapore/money-supply-m2" style="text-decoration: none; text-transform: capitalize;">Money Supply M2</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl04_Repeater2_ctl09_HyperLink2" href="/singapore/money-supply-m3" style="text-decoration: none; text-transform: capitalize;">Money Supply M3</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#5" aria-expanded="false" aria-controls="5"> <b class="dropdown-toggle"></b> Trade </button> </h2> <div id="5" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl00_HyperLink2" href="/singapore/balance-of-trade" style="text-decoration: none; text-transform: capitalize;">Balance of Trade</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl01_HyperLink2" href="/singapore/capital-flows" style="text-decoration: none; text-transform: capitalize;">Capital Flows</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl02_HyperLink2" href="/singapore/current-account" style="text-decoration: none; text-transform: capitalize;">Current Account</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl03_HyperLink2" href="/singapore/current-account-to-gdp" style="text-decoration: none; text-transform: capitalize;">Current Account to GDP</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl04_HyperLink2" href="/singapore/exports" style="text-decoration: none; text-transform: capitalize;">Exports</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl05_HyperLink2" href="/singapore/exports-by-category" style="text-decoration: none; text-transform: capitalize;">Exports by Category</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl06_HyperLink2" href="/singapore/exports-by-country" style="text-decoration: none; text-transform: capitalize;">Exports by Country</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl07_HyperLink2" href="/singapore/external-debt" style="text-decoration: none; text-transform: capitalize;">External Debt</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl08_HyperLink2" href="/singapore/foreign-direct-investment" style="text-decoration: none; text-transform: capitalize;">Foreign Direct Investment</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl09_HyperLink2" href="/singapore/gold-reserves" style="text-decoration: none; text-transform: capitalize;">Gold Reserves</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl10_HyperLink2" href="/singapore/imports" style="text-decoration: none; text-transform: capitalize;">Imports</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl11_HyperLink2" href="/singapore/imports-by-category" style="text-decoration: none; text-transform: capitalize;">Imports by Category</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl12_HyperLink2" href="/singapore/imports-by-country" style="text-decoration: none; text-transform: capitalize;">Imports by Country</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl13_HyperLink2" href="/singapore/exports-of-non-oil-domestic-exports-of" style="text-decoration: none; text-transform: capitalize;">Non-Oil Exports MoM</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl14_HyperLink2" href="/singapore/domestic-exports-of-non-oil-nodx-pctyoy" style="text-decoration: none; text-transform: capitalize;">Non-Oil Exports YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl15_HyperLink2" href="/singapore/terms-of-trade" style="text-decoration: none; text-transform: capitalize;">Terms of Trade</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl16_HyperLink2" href="/singapore/terrorism-index" style="text-decoration: none; text-transform: capitalize;">Terrorism Index</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl05_Repeater2_ctl17_HyperLink2" href="/singapore/tourist-arrivals" style="text-decoration: none; text-transform: capitalize;">Tourist Arrivals</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#6" aria-expanded="false" aria-controls="6"> <b class="dropdown-toggle"></b> Government </button> </h2> <div id="6" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl00_HyperLink2" href="/singapore/corruption-index" style="text-decoration: none; text-transform: capitalize;">Corruption Index</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl01_HyperLink2" href="/singapore/corruption-rank" style="text-decoration: none; text-transform: capitalize;">Corruption Rank</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl02_HyperLink2" href="/singapore/rating" style="text-decoration: none; text-transform: capitalize;">Credit Rating</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl03_HyperLink2" href="/singapore/fiscal-expenditure" style="text-decoration: none; text-transform: capitalize;">Fiscal Expenditure</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl04_HyperLink2" href="/singapore/government-budget" style="text-decoration: none; text-transform: capitalize;">Government Budget</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl05_HyperLink2" href="/singapore/government-budget-value" style="text-decoration: none; text-transform: capitalize;">Government Budget Value</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl06_HyperLink2" href="/singapore/government-debt" style="text-decoration: none; text-transform: capitalize;">Government Debt</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl07_HyperLink2" href="/singapore/government-debt-to-gdp" style="text-decoration: none; text-transform: capitalize;">Government Debt to GDP</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl08_HyperLink2" href="/singapore/government-revenues" style="text-decoration: none; text-transform: capitalize;">Government Revenues</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl09_HyperLink2" href="/singapore/government-spending" style="text-decoration: none; text-transform: capitalize;">Government Spending</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl10_HyperLink2" href="/singapore/holidays" style="text-decoration: none; text-transform: capitalize;">Holidays</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl06_Repeater2_ctl11_HyperLink2" href="/singapore/military-expenditure" style="text-decoration: none; text-transform: capitalize;">Military Expenditure</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#7" aria-expanded="false" aria-controls="7"> <b class="dropdown-toggle"></b> Business </button> </h2> <div id="7" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl00_HyperLink2" href="/singapore/bankruptcies" style="text-decoration: none; text-transform: capitalize;">Bankruptcies</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl01_HyperLink2" href="/singapore/business-confidence" style="text-decoration: none; text-transform: capitalize;">Business Confidence</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl02_HyperLink2" href="/singapore/car-registrations" style="text-decoration: none; text-transform: capitalize;">Car Registrations</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl03_HyperLink2" href="/singapore/changes-in-inventories" style="text-decoration: none; text-transform: capitalize;">Changes in Inventories</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl04_HyperLink2" href="/singapore/industrial-production-mom" style="text-decoration: none; text-transform: capitalize;">Industrial Production MoM</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl05_HyperLink2" href="/singapore/industrial-production" style="text-decoration: none; text-transform: capitalize;">Industrial Production YoY</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl06_HyperLink2" href="/singapore/leading-economic-index" style="text-decoration: none; text-transform: capitalize;">Leading Economic Index</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl07_HyperLink2" href="/singapore/services-sentiment" style="text-decoration: none; text-transform: capitalize;">Services Sentiment</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl07_Repeater2_ctl08_HyperLink2" href="/singapore/manufacturing-pmi" style="text-decoration: none; text-transform: capitalize;">SIPMM Manufacturing PMI</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#8" aria-expanded="false" aria-controls="8"> <b class="dropdown-toggle"></b> Consumer </button> </h2> <div id="8" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl00_HyperLink2" href="/singapore/consumer-spending" style="text-decoration: none; text-transform: capitalize;">Consumer Spending</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl01_HyperLink2" href="/singapore/gasoline-prices" style="text-decoration: none; text-transform: capitalize;">Gasoline Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl02_HyperLink2" href="/singapore/households-debt-to-gdp" style="text-decoration: none; text-transform: capitalize;">Households Debt to GDP</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl03_HyperLink2" href="/singapore/private-sector-credit" style="text-decoration: none; text-transform: capitalize;">Private Sector Credit</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl04_HyperLink2" href="/singapore/retail-sales" style="text-decoration: none; text-transform: capitalize;">Retail Sales MoM</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl08_Repeater2_ctl05_HyperLink2" href="/singapore/retail-sales-annual" style="text-decoration: none; text-transform: capitalize;">Retail Sales YoY</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#9" aria-expanded="false" aria-controls="9"> <b class="dropdown-toggle"></b> Housing </button> </h2> <div id="9" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl09_Repeater2_ctl00_HyperLink2" href="/singapore/home-ownership-rate" style="text-decoration: none; text-transform: capitalize;">Home Ownership Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl09_Repeater2_ctl01_HyperLink2" href="/singapore/housing-index" style="text-decoration: none; text-transform: capitalize;">Housing Index</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl09_Repeater2_ctl02_HyperLink2" href="/singapore/new-home-sales" style="text-decoration: none; text-transform: capitalize;">New Home Sales</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl09_Repeater2_ctl03_HyperLink2" href="/singapore/residential-property-prices" style="text-decoration: none; text-transform: capitalize;">Residential Property Prices</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl09_Repeater2_ctl04_HyperLink2" href="/singapore/house-price-index-mom" style="text-decoration: none; text-transform: capitalize;">URA Property Index</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#10" aria-expanded="false" aria-controls="10"> <b class="dropdown-toggle"></b> Taxes </button> </h2> <div id="10" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl00_HyperLink2" href="/singapore/corporate-tax-rate" style="text-decoration: none; text-transform: capitalize;">Corporate Tax Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl01_HyperLink2" href="/singapore/personal-income-tax-rate" style="text-decoration: none; text-transform: capitalize;">Personal Income Tax Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl02_HyperLink2" href="/singapore/sales-tax-rate" style="text-decoration: none; text-transform: capitalize;">Sales Tax Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl03_HyperLink2" href="/singapore/social-security-rate" style="text-decoration: none; text-transform: capitalize;">Social Security Rate</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl04_HyperLink2" href="/singapore/social-security-rate-for-companies" style="text-decoration: none; text-transform: capitalize;">Social Security Rate For Companies</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl05_HyperLink2" href="/singapore/social-security-rate-for-employees" style="text-decoration: none; text-transform: capitalize;">Social Security Rate For Employees</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl10_Repeater2_ctl06_HyperLink2" href="/singapore/withholding-tax-rate" style="text-decoration: none; text-transform: capitalize;">Withholding Tax Rate</a><br /> </div> </div> </div> <div class="accordion-item card-small-spacing" id="selectCategoryAccordion"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-parent="#accordion" data-bs-target="#11" aria-expanded="false" aria-controls="11"> <b class="dropdown-toggle"></b> Climate </button> </h2> <div id="11" data-bs-parent="#accordion" class="accordion-collapse collapse "> <div class="accordion-body"> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl11_Repeater2_ctl00_HyperLink2" href="/singapore/co2-emissions" style="text-decoration: none; text-transform: capitalize;">CO2 Emissions</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl11_Repeater2_ctl01_HyperLink2" href="/singapore/precipitation" style="text-decoration: none; text-transform: capitalize;">Precipitation</a><br /> <a id="ctl00_LeftSideMenuContainer1_ctl00_Repeater1_ctl11_Repeater2_ctl02_HyperLink2" href="/singapore/temperature" style="text-decoration: none; text-transform: capitalize;">Temperature</a><br /> </div> </div> </div> </div><div id="ctl00_LeftSideMenuContainer1_ctl02_mainPanel" class="card card-top-spacing"> <div class="card-header"> More Indicators </div> <div class='card-body'> <a href='/singapore/indicators'>National Statistics</a><br> <a href='/singapore/indicators-wb-data.html'>World Bank</a><br> </div> </div> </div> <br /> <br /> <div id="ctl00_LeftSideMenuContainer1_AdAnalyticsSquare_AdPanel"> <style>.te-ad{border:thin solid #d3d3d3;width:100%;height:100%; text-align:left;padding:20px;color:#333}.te-ad-link{color:#fff;text-decoration:underline}.te-ad-text{padding-top:10px;color:#333}.te-ad-h2{font-size:24px;line-height: 22px; font-weight:700;}.te-ad-h1{font-size:11px;padding-bottom:0;}.te-ad-item{font-weight:normal}</style> <a href="https://tradingeconomics.com/analytics/features.aspx?source=300x250" target="_blank" style="text-decoration: none;"> <div class="te-ad"> <div class="te-ad-h1">TRADING ECONOMICS</div> <span class="te-ad-h2">Subscriptions </span> <div class="te-ad-text"> <div> We have a plan for your needs. Standard users can export data in a easy to use web interface. Advanced users can use our excel add-in or our Python/R/Matlab packages. API users can feed a custom application. </div> <br /> <div class="row"> <div class="col-xs-12 col-md-7"> <div class="te-ad-item">Economic Calendar</div> <div class="te-ad-item">Historical Data</div> <div class="te-ad-item">News Stream</div> <div class="te-ad-item">Earnings Releases</div> <div class="te-ad-item">Credit Ratings</div> <div class="te-ad-item">Forecasts</div> </div> <div class="col-xs-12 col-md-5"> <div class="te-ad-item">Markets</div> <div class="te-ad-item">Currencies</div> <div class="te-ad-item">Stocks</div> <div class="te-ad-item">Commodities</div> <div class="te-ad-item">Bonds</div> <div class="te-ad-item">Crypto</div> </div> </div> <br /> <div class="btn btn-primary">Get Started</div> </div> </div> <br /></a> </div> <br /> <div id="ctl00_LeftSideMenuContainer1_ctl01_AdPanel"> <style>.te-job-ad{background-image: linear-gradient(#f2f2f2, #fff)}.te-job-ad-text{padding-bottom:7px;padding-top:3px;}.te-job-ad-title{font-size:24px;font-weight:700;}.te-job-ad-item{font-weight:normal} body.dark-theme .te-job-ad{background-image: none;} </style> <div class="te-job-ad"> <a href="https://tradingeconomics.com/careers.aspx?source=jobad" target="_blank" style="text-decoration: none;"> <div class="card"> <div class="card-body"> <div class="te-job-ad-title"> We Are Hiring </div> <div class="te-job-ad-text"> Trading Economics welcomes candidates from around the world. Current job openings: </div> <div class="te-job-ad-item"><span>Web Developer</span> | <span>Data Analyst</span> | <span>Sales</span></div> <br /> <span class="btn btn-success">Apply Now</span> <br /> </div> </div> </a> <br /> </div> </div> <br /> </div> <br /> <br /> <br /> </div> </div> <br /> <br /> </div> <div class="container-fluid te-footer"> <footer> <div class="container"> <div class="row"> <div id="ctl00_Footer1_PanelFooter"> <style>.footer-spacer{padding: 4px}.footer-spacer-head{padding: 30px 4px 4px 4px;}@media only screen and (max-width:768px){.footer-icons{display: flex;margin-left: 50%;}.footer-icons a{padding: 0 12px 8px 0px; }}.footer-twitter{width: 50px; height: 50px;}.footer-github{width: 40px; height: 40px;}.footer-appstore{display: inline-block; overflow: hidden; background: url(//d3fy651gv2fhd3.cloudfront.net/images/appstore-lrg.svg?v=20171228) no-repeat; width: 135px; height: 40px; background-size: contain;}</style> <br /> <br /> <div class="container"> <div class="row"> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">Indicators</div> <a id="ctl00_Footer1_HyperLink6" class="footerItems" href="../">Homepage</a><br /> <a id="ctl00_Footer1_HyperLink17" class="footerItems" href="../countries">Countries</a><br /> <a id="ctl00_Footer1_HyperLink18" class="footerItems" href="../indicators">Indicators</a><br /> <a id="ctl00_Footer1_HyperLink1" class="footerItems" href="../calendar">Calendar</a><br /> <a id="ctl00_Footer1_HyperLink2" class="footerItems" href="../forecasts">Forecasts</a><br /> <a id="ctl00_Footer1_HyperLink11" class="footerItems" href="../country-list/rating">Ratings</a> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">Solutions</div> <a href="/analytics/features.aspx?source=footer"><span class="footerItems">Data Subscriptions</span></a><br /> <a href="/api/?source=footer"><span class="footerItems">API Access</span></a><br /> <a href="/analytics/excel.aspx"><span class="footerItems">Excel Add-In</span></a><br /> <a href="https://developer.tradingeconomics.com/" target="_blank"><span class="footerItems">Developer Account</span></a><br /> <a href="https://docs.tradingeconomics.com/" target="_blank"><span class="footerItems">Documentation</span></a><br /> <a href="/analytics/pricing.aspx?source=footer" target="_blank"><span class="footerItems">Pricing</span></a><br /> <br /> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">About Us</div> <a id="ctl00_Footer1_HyperLink8" class="footerItems" href="../api/customers.aspx">Customers</a><br /> <a id="ctl00_Footer1_HyperLink23" class="footerItems" href="../careers.aspx">Careers</a><br /> <a id="ctl00_Footer1_HyperLink21" class="footerItems" href="../investors.aspx">Investors</a><br /> <a id="ctl00_Footer1_HyperLink20" class="footerItems" href="../advertise.aspx">Advertisers</a><br /> <a id="ctl00_Footer1_HyperLink19" class="footerItems" href="../about-te.aspx">About us</a><br /> <a id="ctl00_Footer1_HyperLink9" class="footerItems" href="../privacy-policy.aspx">Privacy</a> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footer-spacer-head"></div> <a href="https://itunes.apple.com/us/app/trading-economics/id1142178921?mt=8" class="footer-appstore"></a> <div class="footer-spacer"></div> <a href="https://play.google.com/store/apps/details?id=com.tradingeconomics.calendar"> <img alt="Android app on Google Play" src="https://d3fy651gv2fhd3.cloudfront.net/images/google-play.png" /></a> </div> </div> </div> <br /> <div class="footer-copyright"> <br /> <span>Copyright ©2025 TRADING ECONOMICS<br /> All Rights Reserved</span><br /> </div> <br /> <br /> </div> </div> </div> </footer> </div> </form> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.1/js/bootstrap.bundle.min.js"></script> <style>.modal-dialog-centered{display:flex;align-items:center;justify-content:center;height:calc(100% - 60px)}.modal-footer,.modal-header{padding:10px 15px;border:none}#menu-download-dropdown li{padding:0;border-top:none}#menu-download-dropdown li a{padding:10px 20px;display:flex}</style> <script> $(function(){ console.log("/js/pagemenu-exports") // Bootstrap offcanvas events, fix for static one $('.navbar-toggler-icon').click(function () { $(".pagemenu, .pagetabs").css('padding-right', '17px'); }); $('.userOptionsMenu').click(function () { $(".pagemenu, .pagetabs").css('padding-right', '17px'); }); $('.offcanvas').on('show.bs.offcanvas hidden.bs.offcanvas', function () { var isShown = $(this).hasClass('show'); $(".pagemenu, .pagetabs").css('padding-right', isShown ? '17px' : ''); }); var pageTabs = document.querySelector(".pagetabs"); if (pageTabs) { pageTabs.addEventListener("click", function (e) { if (e.target.classList.contains("scroll-top-on-click")) { window.scroll(0, 0); } }); } // build the event to the click $('body').on("click", "a[data-download]", function (event) { event.preventDefault(); event.stopPropagation(); downloadBtnClickEvent(event); }); $('.pagetabs').on('click', '.page-scroll', function () { $('html, body').animate({ scrollTop: $($.attr(this, 'href')).offset().top }, 500); return false; }); $('.pagetabs').on('click', '.page-scroll-adjusted', function () { $('html, body').animate({ scrollTop: $($.attr(this, 'href')).offset().top - 135 }, 500); return false; }); var indicatorPage = false, calendarPage = false, forecastPage = false, snapshotPage = false;; var URL = window.location.pathname; var hasTabs = false; var tab = '<li class="nav-item"><a class="nav-link dropdown-toggle" href="" id="menu-download-btn" class="dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"><i class="bi bi-download"></i><span class="export-text-tab"> ' + "Export" + '</span></a>' tab += '<ul id="menu-download-dropdown" class="dropdown-menu">' tab += '<li class="dropdown-item"><a href="#" data-download="csv"><img src="https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/download-csv-filled.svg" alt="CSV download button" style="height: 25px; width: 25px"> ' + "Download Data" + '</a></li>' tab += '<li class="dropdown-item"><a href="#" data-download="excel"><img src="https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/microsoft-excel-filled.svg" alt="Excel download button" style="height: 25px; width: 25px"> Excel Add-in</a></li>' tab += '<li class="dropdown-item"><a href="#" data-download="api"><img src="https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/download-api.svg" alt="API download button" style="height: 25px; width: 25px"> ' + "API Access" + '</a></li>' tab += '</ul></li>' if ( URL.indexOf("/currencies") > -1 || URL.indexOf("/stocks") > -1 || URL.indexOf("/bonds") > -1 || URL.indexOf("/commodities") > -1 || URL.indexOf("/crypto") > -1 || URL.indexOf(":") > -1 || URL.indexOf("/forecast/currency") > -1 || URL.indexOf("/forecast/stock-market") > -1 || URL.indexOf("/forecast/government-bond-10y") > -1 || URL.indexOf("/forecast/commodity") > -1 || URL.indexOf("/forecast/crypto") > -1 || // !isLoggedIn because API endpoints are still not implemented (!isLoggedIn && URL.split('/').length == 3 && (['indicators', 'forecast'].includes(URL.split('/')[2]) || ['country-list','forecastt'].includes(URL.split('/')[1])))) { var download_link = "https://docs.tradingeconomics.com/"; if (!isLoggedIn) { if (!hasTabs) { console.log("/js/pagemenu", "appending tab") if (IsMobile) { var tab = "<li><a href='" + download_link + "' data-download='csv' class='nav-link'><i class='bi bi-download d-none d-lg-inline'></i> " + "Export" + "</a></li>"; $('#pagemenutabs').append(tab); } else { $('#pagemenutabs').append(tab); } hasTabs = true; snapshotPage = true; } } else { var download_link = "https://api.tradingeconomics.com/"; if (URL.indexOf("/forecast/commodity") > -1) { download_link += "/markets/forecasts/commodity"; } else if (URL.indexOf("/forecast/currency") > -1) { download_link += "/markets/forecasts/currency"; } else if (URL.indexOf("/forecast/stock-market") > -1) { download_link += "/markets/forecasts/index"; } else if (URL.indexOf("/forecast/government-bond-10y") > -1) { download_link += "/markets/forecasts/bond"; } else if (URL.indexOf("/forecast/crypto") > -1) { download_link += "/markets/forecasts/crypto"; } else if (URL.indexOf("/currencies") > -1) { download_link += "markets/currency"; } else if (URL.indexOf("/stocks") > -1) { download_link += "markets/index"; } else if (URL.indexOf("/bonds") > -1) { download_link += "markets/bond"; } else if (URL.indexOf("/commodities") > -1) { download_link += "markets/commodities"; } else if (URL.indexOf("/crypto") > -1) { download_link += "markets/crypto"; } else if (URL.indexOf(":") > -1) { var currCsvDownload = $("#data a.export-btn-csv").attr("href"); download_link = currCsvDownload; } if (!hasTabs) { var tab = "<li class='nav-item'><a class ='nav-link' href='" + download_link + "' data-download='csv'><i class='bi bi-download'></i><span class='export-text-tab'> " + "Export" + "</span></a></li>"; $('#pagemenutabs').append(tab); hasTabs = true; } } snapshotPage = true; } else if (URL.indexOf("/stock-market") > -1 || URL.indexOf("/currency") > -1 || URL.indexOf("/commodity/") > -1 || URL.indexOf("yield") > -1) { if (!isLoggedIn && !hasTabs) { console.log('@pagemmenu - adding download tab') if (IsMobile) { var tab = "<li class='nav-item'><a class ='nav-link' href='" + download_link + "' data-download='csv'><i class='bi bi-download d-none d-lg-inline'></i> " + "Export" + "</a></li>"; $('#pagemenutabs').append(tab); hasTabs = true; } else { $('#pagemenutabs').append(tab); } hasTabs = true; } } else if ($("#menu-download-btn") && $("#menu-download-btn").length > 0) { indicatorPage = true; buildDownloadList($("#menu-download-btn")); $("#menu-download-btn").click(function () { ga('event', 'te_click_data_dropdown'); }); } else if ($(".calendar-download") && $(".calendar-download").length > 0) { calendarPage = true; buildDownloadButton($(".calendar-download")); } else if ($(".indicators-download") && $(".indicators-download").length > 0) { buildDownloadButton($(".indicators-download")); } function downloadBtnClickEvent(event) { console.log("download click .."); var downloadBtn = $(event.target).closest("a"); var dataDownload = $(downloadBtn).attr("data-download"); if (!dataDownload) return; console.log("data-download = " + dataDownload); var modalTitle = ""; var modalContent = ""; var modalFooter = ""; var loginReturn = "https://sso.tradingeconomics.com/?returnurl=https://tradingeconomics.com" + URL; var loginAction = "<a class='btn btn-outline-secondary' href='" + loginReturn + "' target='_blank'>" + (IsMobile ? "Login" : "Member? <b>Login</b>") + "</a>"; var GAEvent = null; var gCategory = null; if (indicatorPage) { gCategory = 'Indicator'; if (gCategory && URL.indexOf("forecast") > -1) { gCategory += '_forecast' }; } else if (calendarPage) { gCategory = 'Calendar'; if (gCategory && URL.indexOf("forecast") > -1) { gCategory += '_forecast' }; } else if (snapshotPage) { gCategory = 'Snapshot'; if (URL.indexOf("/forecast/commodity") > -1) gCategory = "markets_forecasts_commodity"; else if (URL.indexOf("/forecast/currency") > -1) gCategory = "markets_forecasts_currency"; else if (URL.indexOf("/forecast/stock-market") > -1) gCategory = "markets_forecasts_index"; else if (URL.indexOf("/forecast/government-bond-10y") > -1) gCategory = "_markets_forecasts_bond"; else if (URL.indexOf("/forecast/crypto") > -1) gCategory = "markets_forecasts_crypto"; else if (URL.indexOf("/currencies") > -1) gCategory = "markets_currency"; else if (URL.indexOf("/stocks") > -1) gCategory = "markets_index"; else if (URL.indexOf("/bonds") > -1) gCategory = "markets_bond"; else if (URL.indexOf("/commodities") > -1) gCategory = "markets_commodities"; else if (URL.indexOf("/crypto") > -1) gCategory = "markets_crypto"; else if (URL.indexOf(":") > -1) gCategory = "markets_symbols"; else if (URL.indexOf("/country-list/") > -1) gCategory = 'category'; else if (URL.indexOf("/forecast/") > -1) gCategory = 'category_forecast'; else if (URL.indexOf("forecast") > -1) gCategory = 'country_forecast'; else if (URL.indexOf("/indicators") > -1) gCategory = 'country'; } switch (dataDownload) { case "csv": if (isLoggedIn) { GAEvent = 'te_click_csv_download'; ga('event', GAEvent); console.log('GAEvent', GAEvent); downloadItem(event.target, dataDownload); return; } else { //modalTitle = "<b>Join Trading Economics</b>"; modalContent = "Trading Economics has more than 20 million economic indicators for nearly 200 countries, plus exchange rates, government bond yields, stock indexes, shares and commodity prices. "; modalContent += "Subscription users can use our site to export data in <b>CSV</b>, <b>JSON</b> or <b>XML</b>. Users can get it directly through an <b>Excel</b> add-in. "; modalContent += "Clients can also use an <b>API</b> to have direct access to our data, to query our real-time economic calendar and to subscribe to updates from any programming language."; modalFooter += "<div style='text-align:center;'><div class='btn-group'><a class='btn btn-outline-secondary' href='https://tradingeconomics.com/analytics/features.aspx' target='_blank'>Learn More</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/analytics/pricing.aspx' target='_blank'>Pricing</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/contact.aspx?subject=data' target='_blank'>" + (IsMobile ? "Contact" : "Questions? <b>Contact us</b>") + "</a>"; modalFooter += loginAction; modalFooter += "</div></div>" GAEvent = 'te_click_csv'; if (gCategory != null) GAEvent += '_' + gCategory.toLowerCase(); } break; case "excel": modalTitle = "<b>Trading Economics Excel Add-in</b>"; modalContent += "The Trading Economics Excel Addin allows users with an active subscription to access our data directly from excel. " modalContent += "Trading Economic provides more than 20 million economic indicators for nearly 200 countries, plus exchange rates, government bond yields, stock indexes, and commodity prices. "; modalFooter = "<div style='text-align:center;'><div class='btn-group'><a class='btn btn-outline-secondary' href='https://tradingeconomics.com/analytics/excel.aspx' target='_blank'>Learn More</a>"; modalFooter += "<a class='btn btn-outline-secondary' data-download='excel-addin'>Download Addin</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/contact.aspx?subject=excel' target='_blank'>Questions? <b>Contact us</b></a>"; if (!isLoggedIn) modalFooter += loginAction; modalFooter += "</div></div>"; GAEvent = 'te_click_excel'; if (gCategory != null) GAEvent += '_' + gCategory.toLowerCase(); break; case "api": modalTitle = "<b>Trading Economics API</b>"; modalContent = "<div>"; modalContent += "API Users have direct access to our economic data from any programming language, can query our real-time calendar, retrieve financial market quotes and subscribe to live updates. "; modalContent += "Trading Economics provides more than 20 million economic indicators for nearly 200 countries, plus exchange rates, government bond yields, stock indexes, and commodity prices." modalContent += "</div>"; modalFooter = "<div style='text-align:center;'><div class='btn-group'><a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/' target='_blank'>Learn More</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://docs.tradingeconomics.com/' target='_blank'>API Docs</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/contact.aspx' target='_blank'>Questions? <b>Contact us</b></a>"; if (!isLoggedIn) modalFooter += loginAction; modalFooter += "</div></div>"; GAEvent = 'te_click_api'; if (gCategory != null) GAEvent += '_' + gCategory.toLowerCase(); break; case "api-calendar": modalTitle = "<b>Trading Economics API</b>" modalContent = "The Trading Economics API provides you with direct access to our calendar, instant updates after economic events get released, historical data on thousands of indicators and live market quotes. "; modalFooter = "<div style='text-align:center'><div class='btn-group'><a class='btn btn-outline-secondary' href='../api/?source=calendar' target='_blank'>Learn More</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/contact.aspx?subject=api+calendar' target='_blank'>Any question? <b>Contact us</b></a>"; if (!isLoggedIn) modalFooter += loginAction; modalFooter += "</div></div>"; GAEvent = 'te_click_calendar_api'; break; case "excel-addin": GAEvent = 'te_click_excel'; window.location = 'https://github.com/tradingeconomics/tradingeconomics/raw/master/Excel/All_Releases/ExcelAddInDeploy_latest.msi'; return; break; case "forecast": //modalTitle = "<b>Trading Economics Forecasts</b>"; modalContent += "At TRADING ECONOMICS, our forecasts rely on our proprietary global macro model and analysts expectations. We believe that global economies and financial markets are closely intertwined. Our approach involves establishing a general directional bias and then utilizing computer algorithms to calculate price levels. " modalContent += "<br><br>We have five standard investment ratings: " modalContent += "<br><br><img class='recommendation-img' src='//d3fy651gv2fhd3.cloudfront.net/images/recommendations.png' />" modalContent += "<br><br><p><b>Disclaimer</b></p>"; modalContent += "Forecasts and ratings displayed on TRADING ECONOMICS are for informational purposes only. Trading involves a significant risk of loss and may not be suitable for all investors. Therefore, we advise users to exercise caution and do their own research before making any financial decisions." modalFooter += "</div></div>" GAEvent = 'te_click_forecast'; } if (GAEvent != null) { ga('event', GAEvent); console.log('GAEvent: ', GAEvent); } showDownloadModal(modalTitle, modalContent, modalFooter); } function showDownloadModal(modalTitle, modalContent, modalFooter) { var modal = "<div class ='modal' id='downloadModal' tabindex='-1' role='dialog' aria-labelledby='myModalLabel'>"; modal += "<div class='modal-dialog modal-dialog-centered' role='document'>"; modal += "<div class='modal-content'>"; modal += "<div class='modal-header'><div class='modal-title'></div><button type='button' class ='btn-close' data-bs-dismiss='modal' aria-label='Close'></button></div>"; modal += "<div class='modal-body' style='text-align:justify;'></div>" modal += "<div class='modal-footer'></div>" modal += "</div></div></div>" var jModal = $(modal); $(jModal).find(".modal-title").html(modalTitle); // define the modal content if (modalContent) $(jModal).find(".modal-body").html(modalContent); else $(jModal).find(".modal-body").remove(); // define the modal footer if (modalFooter) $(jModal).find(".modal-footer").html(modalFooter); else $(jModal).find(".modal-footer").remove(); $(jModal).on('show.bs.modal', function (e) { $(".navbar").css("padding-right", "17px"); $(".pagemenu").css("padding-right", "17px"); $(".pagetabs").css("padding-right", "17px"); }); $(jModal).on('hide.bs.modal', function (e) { $(".navbar").css("padding-right", ""); $(".pagemenu").css("padding-right", ""); $(".pagetabs").css("padding-right", ""); }); $(jModal).modal("show"); } function buildDownloadList(downloadBtn) { console.log("/js/pagemenu", "buildDownloadList", downloadBtn) downloadBtn.addClass("dropdown-toggle"); downloadBtn.attr("data-bs-toggle", "dropdown"); var csvLink = $("<li><a href='#' data-download='csv'><img src='https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/download-csv-filled.svg' alt='CSV download button' style='height: 25px; width: 25px'> " + "Download Data" + "</a></li>"); var excelLink = $("<li><a href='#' data-download='excel'><img src='https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/microsoft-excel-filled.svg' alt='Excel download button' style='height: 25px; width: 25px'> Excel Add-in</a></li>"); var apiLink = $("<li><a href='#' data-download='api'><img src='https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/download-api.svg' alt='API download button' style='height: 25px; width: 25px'> " + "API Access" + "</a></li>"); var dataportalLink = $("<li><a href='https://data.tradingeconomics.com'><i class='bi bi-save2-fill ms-1'></i> Data Portal</a></li>"); // THIS IS A HACK SO WE DONT NEED TO REWRITE THE LINK BUILT IN THIS MOMENT var currCsvDownload = $("#data a.export-btn-csv").attr("href"); if (currCsvDownload) csvLink = $("<li><a href='" + currCsvDownload + "' data-download='csv' target='_blank'><img src='https://d3fy651gv2fhd3.cloudfront.net/images/downloadicons/download-csv-filled.svg' alt='CSV download button' style='height: 25px; width: 25px'> " + "Download Data" + "</a></li>"); var downloadList = $("<ul id='menu-download-dropdown' class='dropdown-menu'>"); downloadList.append(csvLink); downloadList.append(excelLink); downloadList.append(apiLink); if (isLoggedIn) downloadList.append(dataportalLink); downloadBtn.after(downloadList); } function getDatesForCalendar(type) { const today = new Date(); const yyyy = today.getFullYear(); const mm = today.getMonth(); const dd = today.getDate(); let startDate, endDate; switch (type) { case '1': // Today startDate = new Date(yyyy, mm, dd); endDate = new Date(yyyy, mm, dd + 2); break; case '2': // Tomorrow startDate = new Date(yyyy, mm, dd + 1); endDate = new Date(yyyy, mm, dd + 3); break; case '3': // This Week const startOfWeek = new Date(yyyy, mm, dd - today.getDay() + 1); const endOfWeek = new Date(startOfWeek); endOfWeek.setDate(startOfWeek.getDate() + 8); startDate = startOfWeek; endDate = endOfWeek; break; case '4': // Next Week const nextMonday = new Date(yyyy, mm, dd - today.getDay() + 8); const nextSunday = new Date(nextMonday); nextSunday.setDate(nextMonday.getDate() + 6); startDate = nextMonday; endDate = new Date(nextSunday); endDate.setDate(endDate.getDate() + 2); break; case '5': // This Month startDate = new Date(yyyy, mm, 1); endDate = new Date(yyyy, mm + 1, 1); break; case '6': // Next Month startDate = new Date(yyyy, mm + 1, 1); endDate = new Date(yyyy, mm + 2, 1); break; case '-1': // Yesterday startDate = new Date(yyyy, mm, dd - 1); endDate = new Date(yyyy, mm, dd + 1); break; case '-2': // Previous Week startDate = new Date(yyyy, mm, dd - 7); endDate = new Date(yyyy, mm, dd + 1); break; case '-3': // Previous Month startDate = new Date(yyyy, mm, dd - 30); endDate = new Date(yyyy, mm, dd + 1); break; default: return ''; } const formatDate = (date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; return `/${formatDate(startDate)}/${formatDate(endDate)}`; } function buildCalendarRequest() { let baseUrl = 'https://api.tradingeconomics.com/calendar'; let cookies = document.cookie.split('; '); let cookieObject = {}; cookies.forEach(cookie => { if (TELanguage != '') { if (cookie.includes("calendar-range-" + TELanguage) || cookie.includes("calendar-importance-" + TELanguage) || cookie.includes("cal-custom-range-" + TELanguage)) { let [key, value] = cookie.split('='); try { cookieObject[key] = decodeURIComponent(value); } catch (e) { console.warn(`Error decoding cookie "${key}":`, e); cookieObject[key] = value; } } } else { if (cookie.includes("calendar-range") || cookie.includes("calendar-importance") || cookie.includes("cal-custom-range")) { let [key, value] = cookie.split('='); try { cookieObject[key] = decodeURIComponent(value); } catch (e) { console.warn(`Error decoding cookie "${key}":`, e); cookieObject[key] = value; } } } }); if (Object.keys(cookieObject).length) { if (TELanguage != '') { if (cookieObject.hasOwnProperty("cal-custom-range-"+TELanguage)) { let customdates = cookieObject["cal-custom-range-" + TELanguage].split("|").join(" ").split(" ") let filteredArray = customdates.filter(item => !item.includes(':')); if (filteredArray.length == 2) { let endDay = new Date(filteredArray[1]); endDay.setDate(endDay.getDate() + 1); baseUrl += `/country/all/${filteredArray[0]}/${endDay.toISOString().split('T')[0]}`; } } if (cookieObject.hasOwnProperty("calendar-range-" + TELanguage)) { if (cookieObject["calendar-range-" + TELanguage] != '0') { let dates = getDatesForCalendar(cookieObject["calendar-range-" + TELanguage]) baseUrl += '/country/all' + dates; } } if (cookieObject.hasOwnProperty("calendar-importance-" + TELanguage)) { baseUrl += '?importance=' + cookieObject["calendar-importance-" + TELanguage] } } else { if (cookieObject.hasOwnProperty("cal-custom-range")) { let customdates = cookieObject["cal-custom-range"].split("|").join(" ").split(" ") let filteredArray = customdates.filter(item => !item.includes(':')); if (filteredArray.length == 2) { let endDay = new Date(filteredArray[1]); endDay.setDate(endDay.getDate() + 1); baseUrl += `/country/all/${filteredArray[0]}/${endDay.toISOString().split('T')[0]}`; } } if (cookieObject.hasOwnProperty("calendar-range")) { if (cookieObject["calendar-range"] != '0') { let dates = getDatesForCalendar(cookieObject["calendar-range"]) baseUrl += '/country/all' + dates; } } if (cookieObject.hasOwnProperty("calendar-importance")) { baseUrl += '?importance=' + cookieObject["calendar-importance"] } } return baseUrl; } else { return baseUrl } } function buildDownloadButton(container) { if (isLoggedIn) { var downloadUrl = buildCalendarRequest() var downloadBtn = $("<a id='HyperLinkToDownload' href='" + downloadUrl +"' class='btn btn-info' data-download='csv'><i class='bi bi-download'></i><span class='d-none d-lg-inline'> Download</span></a>"); var apiBtn = $("<a id='HyperLinkToAPI' href='#' class='btn btn btn-outline-secondary' data-download='api-calendar'><i class='bi bi-grid-fill hidden-sm'></i> API</a>"); $(container).append(downloadBtn); $(container).append(apiBtn); } else { var downloadBtn = $("<a id='HyperLinkToDownload' href='https://api.tradingeconomics.com/calendar' class='btn btn-outline-secondary' data-download='api-calendar'><i class='bi bi-download'></i><span class='d-none d-lg-inline'> Download</span></a>"); $(container).append(downloadBtn); } } var lock_download = false; function downloadItem(target, format) { target = $(target).closest('a'); if (!target || target.length == 0 || !$(target).is('a')) { console.log('Download link not found'); return; } if (lock_download) return; lock_download = true; var url = $(target).attr('href'); console.log('url to download = ' + url); var d_type = format; if (format == 'csv') { url = url.replace('format=csv', 'format=json'); d_type = 'json'; } var loader = $("<span> </span><div class='loader' style='height: 15px;width: 15px;display: inline-block;vertical-align: text-bottom;'></div>"); $(target).append(loader); $.ajax({ url: url, type: "GET", dataType: d_type, xhrFields: { withCredentials: true }, }).done(function (data, status, xhr) { console.log('SUCCESS'); console.log('status = ' + xhr.status); console.log('data = ' + data.length); // ga event for logged in successful CSV download if (indicatorPage) { var GAEvent = 'te_click_data_dropdown' ga('event', GAEvent, { 'format': format }); console.log('GAEvent:', GAEvent); } else if (calendarPage) { var GAEvent = 'te_click_calendar' ga('event', GAEvent, { 'format': format }); console.log('GAEvent:', GAEvent); } else if (snapshotPage) { var GAEvent = 'te_click_snapshot' ga('event', GAEvent, { 'format': format }); console.log('GAEvent:', GAEvent); } var filename = buildFilename(url, format); downloadData(data, filename, format); }).fail(function (xhr, status, error) { console.log('ERROR'); console.log('status = ' + xhr.status); console.log('error message = ' + xhr.responseText) // ga event for logged in failed CSV download if (indicatorPage) { var GAEvent = 'te_click_data_dropdown' ga('event', GAEvent, { 'format': format }); console.log('GAEvent::', GAEvent); } else if (calendarPage) { var GAEvent = 'te_click_calendar' ga('event', GAEvent, { 'format': format }); console.log('GAEvent::', GAEvent); } else if (snapshotPage) { var GAEvent = 'te_click_snapshot' ga('event', GAEvent, { 'format': format }); console.log('GAEvent::', GAEvent); } if (xhr.status) { switch (xhr.status) { case 401: // unauthorized launchInvalidKeyModal(); break; case 403: // forbidden launchTrialOverModal(); break; case 400: // bad request launchBadRequestModal(); break; case 409: // conflict (more requests per second than allowed) launchThrottleModal(); break; default: console.log('Unhandled status = ' + xhr.status) var redirect_url = ''; if (TECountry) { redirect_url = 'https://data.tradingeconomics.com/data/export/bycountry?country=' + TECountry; } else { redirect_url = 'https://data.tradingeconomics.com/'; } console.log('redirecting to: ' + redirect_url); window.open(redirect_url, '_blank'); break; } } }).always(function (xhr, status, error) { lock_download = false; console.log('done downloading!'); loader.remove(); }); }; function buildFilename(url, format) { var filename = decodeURI(url); filename = filename.replace("https://api.tradingeconomics.com/", ""); var questionMark = filename.indexOf('?'); if (questionMark != -1) filename = filename.substring(0, questionMark); filename = filename.replace(/\//g, '_'); filename = filename.replace(/\s/g, '_'); filename = filename.replace(/:/g, '_'); filename = filename.replace(/-/g, '_'); return filename + '.' + format; } function downloadData(data, filename, type) { var dataFile = null; switch (type) { case "csv": var csv = convertArrayOfObjectsToCSV({ data: data }); if (csv == null) return; // create the csv file var dataFile = new Blob([csv], { type: "text/csv;charset=utf-8" }); break; case "json": var dataFile = new Blob([JSON.stringify(data)], { type: "text/json;charset=utf-8" }); break; case "xml": var dataFile = new Blob([new XMLSerializer().serializeToString(data.documentElement)], { type: "text/plain;charset=utf-8" }); break; } if (dataFile != null) { var anchor = document.createElement('a'); anchor.href = window.URL.createObjectURL(dataFile); anchor.setAttribute("d-none", true); anchor.setAttribute("target", "_self"); anchor.setAttribute("download", filename); document.body.appendChild(anchor); anchor.click(); anchor.remove(); } } /* Download CSV from: https://halistechnology.com/2015/05/28/use-javascript-to-export-your-data-as-csv/ */ function convertArrayOfObjectsToCSV(args) { var result, ctr, keys, columnDelimiter, lineDelimiter, data; data = args.data || null; if (data == null || !data.length) { return null; } columnDelimiter = args.columnDelimiter || ','; lineDelimiter = args.lineDelimiter || '\r\n'; keys = Object.keys(data[0]); result = ''; result += keys.join(columnDelimiter); result += lineDelimiter; data.forEach(function (item) { ctr = 0; keys.forEach(function (key) { if (ctr > 0) result += columnDelimiter; result += item[key]; ctr++; }); result += lineDelimiter; }); return result; } function errorModal(title, text, actionLink, actionMsg, contactSubject) { var modalTitle = "<span><b>" + title + "</b></span>"; var modalFooter = "<div style='text-align:center;'><div class='btn-group'>"; if (actionLink && actionMsg) modalFooter += "<a class='btn btn-primary' href='" + actionLink + "'>" + actionMsg + "</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/contact.aspx?subject=" + contactSubject + "' target='_blank'>Any question? <b>Contact us</b></a></div></div>"; showDownloadModal(modalTitle, text, modalFooter); } function launchTrialOverModal(experience) { errorModal("Trading Economics Data", "Activate your plan to get more data from Trading Economics", "https://billing.tradingeconomics.com/plans.aspx?activate=true", "ACTIVATE", "account+limit"); } function launchInvalidKeyModal() { errorModal("Trading Economics Data", "Trading Economics provides its premium members with access to more than 20 million indicators for 196 countries plus historical/delayed/live quotes for exchange rates, stocks, indexes, bonds and commodity prices. Subscribe to a plan to download data in a easy to use web interface, using our excel addin or our API.", "https://billing.tradingeconomics.com/plans.aspx?lead=true", "Get Started", "Subscription+Plans"); } function launchThrottleModal() { errorModal("Trading Economics Data", "Limit of request per second reached", null, null, "API+Access"); } function launchBadRequestModal() { errorModal("Trading Economics Data", "Something went wrong with the request, please contact support@tradingeconomics.com, or click the button bellow", "https://tradingeconomics.com/api/contact.aspx?subject=Bad+Request", "CONTACT SUPPORT", "API+Access"); } }); </script> <script> var doTheChart = function () { }; function createCookie(name, value, days) { console.log('Creating Cookie', name, value, days); var expires; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else { expires = ""; } var _host = location.host; if (_host == 'tradingeconomics.com') { _host = '.' + _host; } var cookieString = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; Host=" + _host + "; path=/; SameSite=Strict; Secure"; console.log(cookieString); document.cookie = cookieString; } function setSelectedOffset(obj) { var page = location.href.substring(location.href.lastIndexOf('/') + 1); sessionStorage.removeItem(page); console.log('this.selectedIndex', $(obj).val()) if (typeof $(obj).val() != 'undefined') { setOffset($(obj).val()); } } function setOffset(offset) { console.info("CALENDAR TIMEZONE DROPDOWN " + offset); $("#DropDownListTimezone option[value=" + offset + "]").attr('selected', 'selected'); createCookie("cal-timezone-offset", offset, 365, "/"); var page = location.href.substring(location.href.lastIndexOf('/') + 1); var isRedirected = sessionStorage.getItem(page); if (!isRedirected) { sessionStorage.setItem(page, true); window.location.reload(true); } } $(function(){ console.info("/js/calendar.ascx 20210923"); console.log("Calendar Thumbnail") $("[data-chart]").popover({ 'trigger': 'hover', 'html': true, 'placement': "auto", 'content': function (e) { return "<img src='https://d3fy651gv2fhd3.cloudfront.net/charts/preview.png?w=250&h=150&lbl=0&y2=0&title=false&url=" + e.getAttribute('data-chart') + "'>"; } }); if (!isPostBack) { var offset = new Date().getTimezoneOffset() * -1; // Difference in minutes between UTC and local time. var offsetCookie = GetCalendarCookie("cal-timezone-offset"); if (offsetCookie) { offset = offsetCookie; console.info("CALENDAR TIMEZONE SET FROM COOKIE"); } // Avoid refresh if offset is default (From London) if (offset == 0) { console.info("CALENDAR USER TIME ZONE IS UTC"); } else if (offsetCookie) { // Need to implement a server way to get the cookie console.info("CALENDAR SERVED USING COOKIE"); } else if ($("#DropDownListTimezone option[value=" + offset + "]").length > 0) { setOffset(offset) } } function GetCalendarCookie(name) { console.log('READING CALENDAR COOKIE', name); var nameEQ = encodeURIComponent(name) + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length)); } return null; } var headerArr = $('#calendar .table-header'), downloadHiddenHeader = $('#hiddenDownloadHeader'), winHeight = (window.innerHeight || document.documentElement.clientHeight), winWidth = (window.innerWidth || document.documentElement.clientWidth); function rezieHeaders() { headerArr.each(function (i, head) { var _thisHead = $(head), targetId = _thisHead.attr('data-fixed_copy'), fixedHead = $('.hidden-head[data-id=' + targetId + ']'); fixedHead.css({ width: _thisHead.outerWidth() }); var originalArr = _thisHead.find('th').toArray(), fixedArray = fixedHead.find('th').toArray(); for (var i = 0; i < originalArr.length; i++) { if (fixedArray[i]) { $(fixedArray[i]).css({ width: $(originalArr[i]).outerWidth() }); } } }); if (headerArr && headerArr.length > 0) { downloadHiddenHeader.css({ width: $(headerArr[0]).outerWidth() }); } } rezieHeaders(); $(window).resize(function () { winHeight = (window.innerHeight || document.documentElement.clientHeight); winWidth = (window.innerWidth || document.documentElement.clientWidth); rezieHeaders(); }); doTheChart = function () { //console.log('here') headerArr = $('#calendar .table-header'); winHeight = (window.innerHeight || document.documentElement.clientHeight); winWidth = (window.innerWidth || document.documentElement.clientWidth); rezieHeaders(); bindIt(); } var THE_HEIGHT_START = 50; var THE_HEIGHT = THE_HEIGHT_START; var nBindCount = 0 function bindIt() { nBindCount++; console.log("[" + nBindCount + "] scroll height at calendar.ascx height: " + THE_HEIGHT + " scrollY:" + window.scrollY); // Iterate trough each date header var haveVisibleHeader = false, countVisibleHeaders = 0, lastHeader, lastHeaderDist, firstVisible; var nHeader = 0 headerArr.each(function (i, head) { nHeader++; var rect = head.getBoundingClientRect(); //console.log("calendar header:" + nHeader + " top:" + rect.top + " bottom:" + rect.bottom); if ( rect.top >= THE_HEIGHT_START && rect.left >= 0 && rect.bottom <= winHeight && rect.right <= winWidth ) { haveVisibleHeader = true; countVisibleHeaders++; //console.log("calendar header:" + nHeader + " visible"); // break the foreach loop return false; } else { if (rect.bottom < THE_HEIGHT_START) { // console.log("calendar header:" + nHeader + " invisible before"); if (!lastHeader || rect.bottom > lastHeaderDist) { lastHeader = head; lastHeaderDist = rect.bottom; } } else { //return false; } } }); $('.hidden-head').hide(); var tableVisible = false; var table = document.getElementById('calendar'); if (table) { var tableRect = table.getBoundingClientRect(); if (tableRect.bottom >= THE_HEIGHT) tableVisible = true; if (tableRect.bottom >= THE_HEIGHT && tableRect.top <= THE_HEIGHT_START) { console.log("calendar tableRect.bottom:" + tableRect.bottom + " >= THE_HEIGHT:" + THE_HEIGHT + " tableRect.top:" + tableRect.top); downloadHiddenHeader.css({ 'top': '50px' }); downloadHiddenHeader.show(); } else { console.log("calendar downloadHiddenHeader.hide()"); downloadHiddenHeader.hide(); } } if (tableVisible && typeof lastHeader != 'undefined') { console.log("calendar tableVisible ..."); var targetId = $(lastHeader).attr('data-fixed_copy'), headerToShow = $('.hidden-head[data-id=' + targetId + ']'); headerToShow.css({ 'top': THE_HEIGHT + 'px' }); headerToShow.show(); } }; // This slows down the bind $(window).bind('DOMContentLoaded load resize scroll', function (e) { var scrollY = window.scrollY; if (scrollY >= 0) { setTimeout(function () { if (window.scrollY == scrollY) //console.log("calendar scrollY: " + scrollY); bindIt(); }, 250); } }); /* setInterval(function () { console.log("setinterval at calendar.ascx") if ($(".fixed-top")) { if (!isNaN($(".fixed-top").height())) { THE_HEIGHT = $(".fixed-top").height(); console.log("setinterval at calendar.ascx height: " + THE_HEIGHT); } } }, 500); */ }); </script> <script>console.log("/js/calendar-settings")</script> <script>!function (a) { "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports ? a(require("jquery")) : a(jQuery) }(function (a) { function b(a) { return h.raw ? a : encodeURIComponent(a) } function c(a) { return h.raw ? a : decodeURIComponent(a) } function d(a) { return b(h.json ? JSON.stringify(a) : String(a)) } function e(a) { 0 === a.indexOf('"') && (a = a.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\")); try { return a = decodeURIComponent(a.replace(g, " ")), h.json ? JSON.parse(a) : a } catch (b) { } } function f(b, c) { var d = h.raw ? b : e(b); return a.isFunction(c) ? c(d) : d } var g = /\+/g, h = a.cookie = function (e, g, i) { if (void 0 !== g && !a.isFunction(g)) { if (i = a.extend({}, h.defaults, i), "number" == typeof i.expires) { var j = i.expires, k = i.expires = new Date; k.setTime(+k + 864e5 * j) } return document.cookie = [b(e), "=", d(g), i.expires ? "; expires=" + i.expires.toUTCString() : "", i.path ? "; path=" + i.path : "", i.domain ? "; domain=" + i.domain : "", i.secure ? "; secure" : ""].join("") } for (var l = e ? void 0 : {}, m = document.cookie ? document.cookie.split("; ") : [], n = 0, o = m.length; o > n; n++) { var p = m[n].split("="), q = c(p.shift()), r = p.join("="); if (e && e === q) { l = f(r, g); break } e || void 0 === (r = f(r)) || (l[q] = r) } return l }; h.defaults = {}, a.removeCookie = function (b, c) { return void 0 === a.cookie(b) ? !1 : (a.cookie(b, "", a.extend({}, c, { expires: -1 })), !a.cookie(b)) } });</script> <script> if (location.pathname.indexOf('/calendar/') > -1) { console.log('Removing Path Specific Cookies'); document.cookie = "calendar-countries=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.tradingeconomics.com; path=" + location.pathname; document.cookie = "calendar-importance=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.tradingeconomics.com; path=" + location.pathname; document.cookie = "cal-timezone-offset=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.tradingeconomics.com; path=" + location.pathname; document.cookie = "calendar-range=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.tradingeconomics.com; path=" + location.pathname; } window.TEcreateCookie = function (name, value, days, path, domain) { console.log('TEcreateCookie', name, value); console.log('TEcreateCookie: Days', days, 'Path:', path, 'Domain:', domain); if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toUTCString(); console.log('TEcreateCookie Expires', expires); } else { var date = new Date(); var _adding = 5 * 60 * 1000; // Languages var nameSwitch = name; if (document.location.host.split(".")[0].length == 2) { nameSwitch = name.replace('-' + document.location.host.split(".")[0], ''); console.log('TEcreateCookie Name Switch', nameSwitch); } if (location.pathname.startsWith('/calendar')) { switch (nameSwitch) { case 'cal-timezone-offset': _adding = 365 * 24 * 60 * 60 * 1000; break; case 'calendar-countries': _adding = 31 * 24 * 60 * 60 * 1000; break; case 'calendar-importance': _adding = 24 * 60 * 60 * 1000; break; case 'calendar-range': _adding = 24 * 60 * 60 * 1000; break; } } if (location.pathname.startsWith('/earnings')) { switch (nameSwitch) { case 'earn-countries': _adding = 31 * 24 * 60 * 60 * 1000; break; case 'earn-importance': _adding = 24 * 60 * 60 * 1000; break; case 'earn-range': _adding = 60 * 60 * 1000; break; } } date.setTime(date.getTime() + _adding); var expires = "; expires=" + date.toUTCString(); console.log('TEcreateCookie Expires:', _adding); } if (typeof path == "undefined") { if (location.pathname.substr(0, 9) == '/calendar') path = '/calendar'; else path = location.pathname; } if (typeof domain == "undefined") domain = location.host; if (location.host == 'tradingeconomics.com') domain = '.tradingeconomics.com'; var _cookie = name + "=" + value + expires + "; path=" + path + "; Domain=" + domain + "; SameSite=None; Secure" console.log('TEcreateCookie ouptut:', name, _cookie); document.cookie = _cookie; /* var cookieOptions = { expires: date, path: path, domain: domain, secure: true, // To set the "Secure" attribute sameSite: "None" // To set the "SameSite" attribute }; $.cookie(name, value, cookieOptions); */ } window.TEreadCookie = function (name) { console.log('TEreadCookie', name); var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) == 0) { return c.substring(nameEQ.length, c.length); } } return null; } window.TEeraseCookie = function (name, spec_domain) { window.TEcreateCookie(name, "", -1, null, spec_domain); // Sometimes the above does not work document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=" + location.host + "; path=" + location.pathname; } Array.prototype.differenceTE = function (a) { return this.filter(function (i) { return a.indexOf(i) < 0; }); }; function showCalendarModal(modalTitle, modalContent, modalFooter) { var modal = "<div class ='modal' id='downloadModal' tabindex='-1' role='dialog' aria-labelledby='myModalLabel'>"; modal += "<div class='modal-dialog modal-dialog-centered' role='document'>"; modal += "<div class='modal-content'>"; modal += "<div class='modal-header'><div class='modal-title' style='font-weight:bold'></div><button type='button' class ='btn-close' data-bs-dismiss='modal' aria-label='Close'></button></div>"; modal += "<div class='modal-body' style='text-align:justify;'></div>" modal += "<div class='modal-footer'></div>" modal += "</div></div></div>" var jModal = $(modal); $(jModal).find(".modal-title").html(modalTitle); // define the modal content if (modalContent) $(jModal).find(".modal-body").html(modalContent); else $(jModal).find(".modal-body").remove(); // define the modal footer if (modalFooter) $(jModal).find(".modal-footer").html(modalFooter); else $(jModal).find(".modal-footer").remove(); $(jModal).on('show.bs.modal', function (e) { $(".navbar").css("padding-right", "17px"); $(".pagemenu").css("padding-right", "17px"); $(".pagetabs").css("padding-right", "17px"); }); $(jModal).on('hide.bs.modal', function (e) { $(".navbar").css("padding-right", ""); $(".pagemenu").css("padding-right", ""); $(".pagetabs").css("padding-right", ""); }); $(jModal).modal("show"); } function setCustomDates(e) { e.stopPropagation(); e.preventDefault(); var startDate = $("#startDate").val(); var endDate = $("#endDate").val(); //console.log('startDate', startDate, 'endDate', endDate); var lifetime = .5 * 24 / 60 / 60; //five minutes in days //console.log('lifetime', lifetime); window.TEcreateCookie(CUSTOM_RANGE_COOKIE_NAME, startDate + "|" + endDate, lifetime); window.TEeraseCookie(RANGE_COOKIE_NAME); if (!isLoggedIn) { let start = new Date(startDate); let end = new Date(endDate); let timeDiff = end.getTime() - start.getTime(); let daysDiff = timeDiff / (1000 * 3600 * 24); let yearDiff = end.getFullYear() - start.getFullYear(); let monthDiff = (end.getMonth() + 1) - (start.getMonth() + 1); let totalMonthDiff = yearDiff * 12 + monthDiff; if (totalMonthDiff > 1 || (totalMonthDiff === 1 && end.getDate() > start.getDate())) { let modalTitle = `` let modalContent = `To unlock full access and remove limits on custom date requests, we invite you to register and subscribe today! As a guest, you're limited to requests within 1 month or 1,000 records but, by signing up you'll enjoy unlimited custom data and a host of premium features.` let modalFooter = "<div style='text-align:center'><div class='btn-group'><a class='btn btn-outline-secondary' href='https://tradingeconomics.com/analytics/pricing.aspx?source=calendar-rows-limit' target='_blank'>Get Started</a>"; modalFooter += "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/contact.aspx?subject=api+calendar' target='_blank'>Any question? <b>Contact us</b></a>"; modalFooter += "</div></div>"; showCalendarModal(modalTitle, modalContent, modalFooter) } else { location.reload(); } } else { location.reload(); } } function clearSelection(e) { var _options = $(".te-c-option").each(function (i, item) { //console.log('i', i, 'item', item); var _input = $(item).find('input'); _input.prop('checked', false); }); selected_countries = []; } function calendarSelecting(dom, e, _c, isGlobal) { //console.log('arguments', arguments); e.stopPropagation(); e.preventDefault(); if (isGlobal) { clearSelection(); selected_countries = []; switch (_c.toUpperCase()) { case 'G20': selected_countries = G20_ISOS.slice(); break; case 'WORLD': //console.log('SELECT', WORLD_ISOS); selected_countries = WORLD_ISOS.slice(); break; case 'AFRICA': selected_countries = AFRICA_ISOS.slice(); break; case 'ASIA': selected_countries = ASIA_ISOS.slice(); break; case 'AMERICA': selected_countries = AMERICA_ISOS.slice(); break; case 'EUROPE': selected_countries = EUROPE_ISOS.slice(); break; default: console.log('uncaught:', _c); } for (var wi in selected_countries) { //console.log('SELECT:', selected_countries[wi]); if (typeof selected_countries[wi] != 'string') { continue; } //console.log($('.te-c-option-' + WORLD_ISOS[wi]).length); if ($('.te-c-option-' + selected_countries[wi]).length) { var _input = $('.te-c-option-' + selected_countries[wi]).find('input'); _input.prop('checked', true); } } } var _input = $(dom).find('input'); var c = ''; if (_c) { c = _c.toLowerCase(); } if (selected_countries.indexOf(c) > -1) { selected_countries.splice(selected_countries.indexOf(c), 1); setTimeout(function () { _input.prop('checked', false) }, 100); } else { if (!isGlobal) { selected_countries.push(c); setTimeout(function () { _input.prop('checked', true) }, 100); } } highlightGroupsSelection(); } function highlightGroupsSelection() { //console.log('G20', selected_countries.differenceTE(G20_ISOS).length, G20_ISOS.differenceTE(selected_countries).length) if (selected_countries.differenceTE(G20_ISOS).length == 0 && selected_countries.differenceTE(G20_ISOS).length == G20_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-g20").addClass("te-c-group-selected"); } else { $(".te-c-option-g20").removeClass("te-c-group-selected"); } if (selected_countries.differenceTE(WORLD_ISOS).length == 0 && selected_countries.differenceTE(WORLD_ISOS).length == WORLD_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-world").addClass("te-c-group-selected"); } else { $(".te-c-option-world").removeClass("te-c-group-selected"); } if (selected_countries.differenceTE(AFRICA_ISOS).length == 0 && selected_countries.differenceTE(AFRICA_ISOS).length == AFRICA_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-africa").addClass("te-c-group-selected"); } else { $(".te-c-option-africa").removeClass("te-c-group-selected"); } if (selected_countries.differenceTE(AMERICA_ISOS).length == 0 && selected_countries.differenceTE(AMERICA_ISOS).length == AMERICA_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-america").addClass("te-c-group-selected"); } else { $(".te-c-option-america").removeClass("te-c-group-selected"); } if (selected_countries.differenceTE(ASIA_ISOS).length == 0 && selected_countries.differenceTE(ASIA_ISOS).length == ASIA_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-asia").addClass("te-c-group-selected"); } else { $(".te-c-option-asia").removeClass("te-c-group-selected"); } if (selected_countries.differenceTE(EUROPE_ISOS).length == 0 && selected_countries.differenceTE(EUROPE_ISOS).length == EUROPE_ISOS.differenceTE(selected_countries).length) { $(".te-c-option-europe").addClass("te-c-group-selected"); } else { $(".te-c-option-europe").removeClass("te-c-group-selected"); } } function setCalendarImportance(str_imptt) { window.TEcreateCookie(IMPORTANCE_COOKIE_NAME, str_imptt); if (typeof forceSSORefresh != "undefined") { forceSSORefresh(); } location.reload(); } function setCalendarRange(str_range) { window.TEcreateCookie(RANGE_COOKIE_NAME, str_range); if (typeof forceSSORefresh != "undefined") { forceSSORefresh(); } //te-custom-range-importance window.TEeraseCookie(CUSTOM_RANGE_COOKIE_NAME); location.reload(); } function saveSelectionAndGO() { //console.log('START LOADING'); $("#te-c-loading").toggleClass("d-none"); //console.log('CLOSE DROPDOWN'); $('.te-c-dropdown-toggle').dropdown('toggle'); window.TEcreateCookie(COUNTRIES_COOKIE_NAME, selected_countries.join(",")); if (typeof forceSSORefresh != "undefined") { forceSSORefresh(); } var path = location.pathname; if (path.indexOf("earnings") !== -1) { console.log("contains earnings") window.location.href = '/earnings' + window.location.search; } else if (path.indexOf("/calendar/") !== -1) { console.log("contains calendar category") window.location.href = window.location.href; } else { console.log("does not contain earnings") window.location.href = '/calendar' + window.location.search; if(isLoggedIn) doSync(); } } function toggleMainCountrySelection(instruction) { if (instruction && instruction == 'off') { $("#te-c-main-countries").addClass("d-none"); return; } $("#te-c-main-countries").toggleClass("d-none"); } function toggleCountriesDisplay(direction) { $("#te-c-all").toggleClass("d-none"); } function SetCalendaSettings() { highlightGroupsSelection(); $("#te-c-dropdown").click(function (e) { e.stopPropagation(); e.preventDefault(); }); } $(function(){ SetCalendaSettings(); }); </script> <script> console.log('SSO OPTS SYNC'); var _sso_user_options_url = "https://sso.tradingeconomics.com/api/UserOptions"; var option_tags = [ "earn-countries", "earn-range", "earn-importance", "calendar-countries", "calendar-range", "calendar-importance" ]; var SYNC_TRACK_COOKIE_NAME = 'te_sso_sync_' + location.pathname; var createCookie = function (name, value, days, spec_path) { if (days) { var date = new Date(); var _adding = days * 24 * 60 * 60 * 1000; //console.log('adding', _adding) date.setTime(date.getTime() + _adding); var _expiring = date.toUTCString(); //console.log(name, '_expiring', _expiring); var expires = "; expires=" + _expiring; } else { var expires = ""; } document.cookie = name + "=" + value + expires + "; path=" + (spec_path || location.pathname); } var eraseCookie = function (name, spec_path) { console.log('eraseCookie'); createCookie(name, "", -1, spec_path); } var GetTECookie = function (name) { //console.log('READING COOKIE', name); var nameEQ = encodeURIComponent(name) + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length)); } return null; } var am_syncing = false; function forceSSORefresh() { console.log('forceSSORefresh', am_syncing) if (am_syncing) { clearTimeout(am_syncing); } eraseCookie(SYNC_TRACK_COOKIE_NAME, "/"); am_syncing = setTimeout(doSync, 5 * 1000); } var doSync = function () { var to_sync = []; var in_sync = GetTECookie(SYNC_TRACK_COOKIE_NAME); //console.log('in_sync:', in_sync); var _host = document.location.host console.log("_host " + _host) var lang = _host.split(".")[0] if (!in_sync) { for (var ts in option_tags) { if (typeof option_tags[ts] != 'string') { continue; } var _name = option_tags[ts] if (lang != 'tradingeconomics' && lang.length == 2) { console.log("It's Language site - " + lang) _name = option_tags[ts] += "-" + lang } //console.log('option_tags[ts]', option_tags[ts]); var temp_cookie = GetTECookie(option_tags[ts]); if (temp_cookie) { to_sync.push({ Host: document.location.host, Env: document.location.pathname, Name: _name, Value: temp_cookie, SameSite: 'Strict', Secure: true }) } } } console.log('s', to_sync && to_sync.length); if (to_sync && to_sync.length) { $.ajax({ url: _sso_user_options_url, dataType: "json", method: "POST", data: { list: to_sync }, xhrFields: { withCredentials: true }, complete: function (object, status) { console.log('status', status); createCookie(SYNC_TRACK_COOKIE_NAME, new Date(), null, "/"); } }); } } </script> <script> console.log("Countdown enabled") let countdownIntervals = []; let scheduledTimeouts = []; function getTodayDate(timezoneOffsetMinutes) { const now = new Date(); const utcNow = now.getTime() + (now.getTimezoneOffset() * 60000); const adjustedTime = new Date(utcNow + timezoneOffsetMinutes * 60000); const year = adjustedTime.getFullYear(); const month = String(adjustedTime.getMonth() + 1).padStart(2, '0'); const day = String(adjustedTime.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } function parseEventTime(eventDateString, scheduleTimeString, timezoneMinutes) { const timeParts = scheduleTimeString.split(' '); const time = timeParts[0]; const period = timeParts[1]; let [hours, minutes] = time.split(':').map(Number); if (period === 'PM' && hours < 12) { hours += 12; } else if (period === 'AM' && hours === 12) { hours = 0; } const [year, month, day] = eventDateString.split('-').map(Number); const eventDate = new Date(Date.UTC(year, month - 1, day, hours, minutes, 0)); if (timezoneMinutes !== 0) { const utcTime = eventDate.getTime(); const adjustedTime = utcTime - (timezoneMinutes * 60000); return new Date(adjustedTime); } else { return eventDate; } } function startCountdown(eventTime, countdownElement) { const originalText = $("." + countdownElement).text().trim(); const countdownInterval = setInterval(() => { const now = new Date(); const timeDifference = eventTime - now; $("." + countdownElement).addClass("countdown-event") if (timeDifference <= 0) { $("." + countdownElement).removeClass("countdown-event") clearInterval(countdownInterval); $("." + countdownElement).text(originalText); return; } let minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60)); let seconds = Math.floor((timeDifference % (1000 * 60)) / 1000); if (seconds < 10) { seconds = `0${seconds}`; } if (minutes < 10) { minutes = `0${minutes}`; } $("." + countdownElement).text(` ${minutes}:${seconds} `); }, 1000); countdownIntervals.push(countdownInterval); } function scheduleCountdown(eventTime, countdownElement) { const now = new Date(); const timeDifference = eventTime - now; const twoMinutes = 5 * 60 * 1000; if (timeDifference > twoMinutes) { const eventTimeOut = setTimeout(() => { startCountdown(eventTime, countdownElement); }, timeDifference - twoMinutes); scheduledTimeouts.push(eventTimeOut); } else if (timeDifference > 0) { startCountdown(eventTime, countdownElement); } } function clearPreviousTimers() { countdownIntervals.forEach(interval => clearInterval(interval)); countdownIntervals = []; scheduledTimeouts.forEach(timeout => clearTimeout(timeout)); scheduledTimeouts = []; } function setupEventCountdowns() { clearPreviousTimers(); const timezoneMinutes = parseInt($('#DropDownListTimezone').val(), 10); const todayDate = getTodayDate(timezoneMinutes) const eventsAllowedLvl = 3 const allTodayTds = $("td").filter(function () { return $(this).hasClass(todayDate); }); allTodayTds.each(function () { const eventDate = $(this)[0].classList[0]; const eventSchedule = $(this).text().trim(); const eventNumber = $(this).find('span').attr('class').split(' ')[0]; const eventLvl = $(this).find('span').attr('class').split(' ')[1].split('-')[2]; if (eventDate != null && eventSchedule != null && eventNumber != null) { if (eventDate.length > 0 && eventSchedule.length > 0 && eventLvl >= eventsAllowedLvl) { const eventDateTime = parseEventTime(eventDate, eventSchedule, timezoneMinutes); scheduleCountdown(eventDateTime, eventNumber); } } }); } $('#DropDownListTimezone').on('change', setupEventCountdowns); document.addEventListener("DOMContentLoaded", setupEventCountdowns); </script> <script> $(function(){ console.log("Calendar Alerts 2022-07-25") const sl = '<div class="holds-the-iframe"><iframe src="https://sso.tradingeconomics.com/?returnUrl=' + window.location.href + '!te_sso" style="min-height: 500px;border:0;width: 100%;"></iframe></div>'; const t = "https://alerts.tradingeconomics.com/alerts/subscribe", e = c("TEUsername"), n = c(".ASPXAUTH"); let s; let o; let dc = document.cookie; let params; let TENotifications = 0; function r() { $("div.te-alert-bell").click(function (r) { let alrtBtn = $(r.target) let i = $(r.target).parent().parent(); const c = i.data("country").toLowerCase(), ca = i.data("category").toLowerCase(), ev = i.data("event").toLowerCase(), l = i.data("symbol").toLowerCase(); var alrtTitle = alrtBtn.attr("alert-title"); sdc('c', c), sdc('ca', ca), sdc('ev', ev), sdc('l', i.data("symbol")), sdc('alrtTitle', alrtTitle); var tempUName = null; tempUName = hh("TEUsername"); if (!tempUName) { showDownloadModal("Login / Sign-up to Tradingeconomics", sl, ""); } else { if (!e) { window.location = window.location.href; } $(alrtBtn).css('display', 'none'); $(alrtBtn).parent().append('<div class="loader-calendar"></div>'); if (l.indexOf("calendar") >= 0) { params = { country: c, category: ca, modifier: "api", event: ev, teusername: e } } else { params = { country: c, category: ca, modifier: "api", teusername: e } } if (typeof alrtTitle !== typeof undefined && alrtTitle !== false) { alrtTitle = alrtBtn.attr("alert-title").toLowerCase(); } if (alrtBtn.data("subscribed")) { a("GET", (u = l, 'https://alerts.tradingeconomics.com/api/te/' + encodeURIComponent(e) + '/unsubscribe/' + alrtTitle + '/'), null, function (t, e) { $('.loader-calendar').remove(); ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); $(alrtBtn).css('display', 'block'); //e.status && (s.splice(s.indexOf(c), 1), alrtBtn.data("subscribed", null), alrtBtn.css("color", "#dedede"), alrtBtn.attr("title", "Create Alert"), alrtBtn.removeAttr('data-original-title'), ga("send", "event", "Alerts Unsubscription", l, "calendar"); ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); }); } else { a("POST", t, params, function (t, e) { if (e.status && e.status[0].status || e.status && e.status[0].msg) { $('.loader-calendar').remove(); $(alrtBtn).css('display', 'block'); //s.push(e.events[0].s), alrtBtn.data("subscribed", "true"), alrtBtn.addClass("te-alert-subscribed"), alrtBtn.attr("title", "Remove Alert"), alrtBtn.attr("alert-title", e.title); ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); TENotificationTE('CALENDAR', 'Email alert subscribed for ' + capitalize(e.events[0].s) + ' ' + capitalize(e.events[0].suffix) + '.', i.data("url").toLowerCase(), 1, 0); } }) } var u } function hh(t) { for (var e = encodeURIComponent(t) + "=", n = document.cookie.split(";"), s = 0; s < n.length; s++) { for (var o = n[s]; " " === o.charAt(0);) o = o.substring(1, o.length); if (0 === o.indexOf(e)) return decodeURIComponent(o.substring(e.length, o.length)) } return null } }); if (c('c') && n) { var cdc = c('c'), cdca = c('ca'), cdev = c('ev'), cdl = c('l'), cdalrtTitle = c('alrtTitle'); if (cdc && cdca && cdl) { var alrtTr = $('tr[data-symbol="' + cdl.trim() + '"]'); var alrtBtn = $(alrtTr).find('td:nth-child(9)').children(); if (cdl.indexOf("calendar") >= 0) { params = { country: cdc, category: cdca, modifier: "api", event: cdev, teusername: e } } else { params = { country: cdc, category: cdca, modifier: "api", teusername: e } } a("POST", t, params, function (t, e) { if (e.status && e.status[0].status || e.status && e.status[0].msg) { //s.push(e.events[0].s), alrtBtn.data("subscribed", "true"), alrtBtn.addClass("te-alert-subscribed"), alrtBtn.attr("title", "Remove Alert"), alrtBtn.attr("alert-title", e.title); } }) } ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); } $(".close-this-popup").click(function () { $(this).parent().parent().parent().hide(); }); } function capitalize(str) { return str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); } function TENotificationTE(_title, _text, _url, _importance) { TENotifications++; let _url_admin = 'https://data.tradingeconomics.com/alerts/'; var IsDesktop = false; var _titleHTML = 'ALERT'; var _alertType = 'CALENDAR'; var _color = '#5cb85c'; _titleHTML = '<div style="padding-bottom:10px; font-size: 11px;color: #fff; font-weight: bold;"><span style="background-color: #000; padding: 3px;">' + _alertType + '</span><span style="background-color: ' + _color + '; padding: 3px;">ALERT</span></div>'; var _textHTML = _text; if (_text && _text.length > 200) { _textHTML = _text.substring(0, 200) + '...'; _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url_admin + '">Manage</a>'; } else if (_text) { _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url_admin + '">Manage</a>'; } PNotify.desktop.permission(); (new PNotify({ title: _titleHTML, text: _textHTML, hide: false, animation: 'fade', shadow: true, icon: false, mouse_reset: false, hide: true, delay: 5000, buttons: { sticker: false }, addclass: 'custom', })).get().click(function (e) { if ($('.ui-pnotify-closer, .ui-pnotify-sticker, .ui-pnotify-closer *, .ui-pnotify-sticker *').is(e.target)) { return; } //window.location = _url; }); } function sdc(cn, cv) { document.cookie = cn + "=" + cv + ";"; } function ddc(n) { document.cookie = n + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; }; function i() { for (var t = 0; t < s.length; t++) { if (s[t].json.prettySubTitle && s[t].json.alertType == 'calendar') { let cat = s[t].json.prettysubtitle || s[t].json.prettySubTitle; let cou = s[t].json.prettyTitle if (s[t].json.event) { let eve = s[t].json.event const e = $('tr[data-country="' + cou.toLowerCase() + '"][data-category="' + cat.toLowerCase() + '"][data-event="' + eve.toLowerCase() + '"]') if (e.length) { $(e).find('td:last').children().data("subscribed", "true").addClass("te-alert-subscribed").attr("title", "Remove Alert").attr("alert-title", s[t].title); } } else { const e = $('tr[data-country="' + cou.toLowerCase() + '"][data-category="' + cat.toLowerCase() + '"]') if (e.length) { $(e).find('td:last').children().data("subscribed", "true").addClass("te-alert-subscribed").attr("title", "Remove Alert").attr("alert-title", s[t].title); } } } } } function a(t, e, n, s) { const o = { method: t, url: e }; n && (o.data = n), $.ajax(o).done(function (t) { s(null, t) }).fail(function (t, e, n) { s(n) }) } function showDownloadModal(modalTitle, modalContent, modalFooter) { var modal = "<div class ='modal' id='downloadModal' tabindex='-1' role='dialog' aria-labelledby='myModalLabel'>"; modal += "<div class='modal-dialog modal-dialog-centered' role='document'>"; modal += "<div class='modal-content' style='width:100%; background-color: #fafafa;'>"; modal += "<div class='modal-header'>" modal += "<p class='modal-title'></p>" modal += "<button type='button' class='btn-close' data-bs-dismiss='modal' aria-label='Close'></button></div> "; modal += "<div class='modal-body' style='text-align:justify;'></div>" modal += "<div class='modal-footer'></div>" modal += "</div></div></div>" var jModal = $(modal); $(jModal).find(".modal-title").html(modalTitle); if (modalContent) $(jModal).find(".modal-body").html(modalContent); else $(jModal).find(".modal-body").remove(); if (modalFooter) $(jModal).find(".modal-footer").html(modalFooter); else $(jModal).find(".modal-footer").remove(); $(jModal).on('show.bs.modal', function (e) { $(".navbar").css("padding-right", "17px"); $(".pagemenu").css("padding-right", "17px"); $(".pagetabs").css("padding-right", "17px"); }); $(jModal).on('hide.bs.modal', function (e) { ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); $(".navbar").css("padding-right", ""); $(".pagemenu").css("padding-right", ""); $(".pagetabs").css("padding-right", ""); }); $(jModal).modal("show"); } function c(t) { for (var e = encodeURIComponent(t) + "=", n = document.cookie.split(";"), s = 0; s < n.length; s++) { for (var o = n[s]; " " === o.charAt(0);) o = o.substring(1, o.length); if (0 === o.indexOf(e)) return decodeURIComponent(o.substring(e.length, o.length)) } return null } if (e) { function hh(t) { for (var e = encodeURIComponent(t) + "=", n = document.cookie.split(";"), s = 0; s < n.length; s++) { for (var o = n[s]; " " === o.charAt(0);) o = o.substring(1, o.length); if (0 === o.indexOf(e)) return decodeURIComponent(o.substring(e.length, o.length)) } return null } const teusr = { "hash": e } a("POST", 'https://alerts.tradingeconomics.com/api/uid/', teusr, function (t, em) { var tempUName = hh("TEUsername"); // console.log("em: " + JSON.stringify(tempUName)); n && a("GET", 'https://alerts.tradingeconomics.com/subscriptions/sub/' + encodeURIComponent(tempUName) + '/', null, function (t, e) { // n && a("GET", 'https://alerts.tradingeconomics.com/subscriptions/sub/'+encodeURIComponent(em.user)+'/', null, function(t, e) { !t && e.length && (s = e, i()) }), r(), new MutationObserver(function (t) { r(), n && i() })/*.observe(document.getElementById("UpdatePanel1"), { childList: !0 })*/ }); } else { r(); ddc('c'), ddc('ca'), ddc('ev'), ddc('l'), ddc('alrtTitle'); } }); </script> <script> console.log('/controls/io.ascx') TEdecryptk = 'j9ONifjoKzxt7kmfYTdKK/5vve0b9Y1UCj/n50jr8d8=' TEdecryptn = 'Ipp9HNSfVBUntqFK7PrtofYaOPV312xy' var socket_url = 'https://live.tradingeconomics.com?key=rain'; console.log("IO Connecting to " + socket_url) var TE_URL = window.location.pathname; socket_url += "&url=" + TE_URL; $.ajaxSetup({ cache: !0 }); $.getScript('//d3fy651gv2fhd3.cloudfront.net/js/io.js?v=20240223', function () { OnSocketIOLoad(); }); var socket = null; var MKTChannels = [] var Subscribed = [] function base64ToUint8Array(base64) { const binaryString = atob(base64); const length = binaryString.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes; } function decryptMessage(ciphertext) { const key = base64ToUint8Array(TEdecryptk); const nonce = base64ToUint8Array(TEdecryptn); const ciphertextUint8Array = new Uint8Array(ciphertext); let decryptedPlaintext = sodium.crypto_secretbox_open_easy(ciphertextUint8Array, nonce, key); decryptedPlaintext = pako.inflate(decryptedPlaintext, { to: 'string' }); if (decryptedPlaintext !== undefined) { return (JSON.parse(decryptedPlaintext)) } } function OnSocketIOLoad() { var MKT_TBL_SELEC = "#table-logic-handler-for-sockets"; var TEChannels = ['calendar']; if (TE_URL == '/') TEChannels = ['calendar', 'market']; else if (TE_URL == "/calendar") TEChannels = ['calendar']; else if (TE_URL.indexOf("calendar") > -1) TEChannels = ['calendar', 'market']; else if (TE_URL.indexOf("/dividends") > -1 || TE_URL.indexOf("/ipo") > -1 || TE_URL.indexOf("/stock-splits") > -1 || TE_URL.indexOf("/earnings") > -1) TEChannels = ['calendar', 'market']; else if (TE_URL.indexOf("stream") > -1) TEChannels = ['calendar', 'market', 'stream']; else if (TE_URL.indexOf("/currencies") > -1) TEChannels = ['currencies', 'calendar']; else if (TE_URL.indexOf("/stocks") > -1) TEChannels = ['indexes', 'calendar']; else if (TE_URL.indexOf("/bonds") > -1) TEChannels = ['bonds', 'calendar']; else if (TE_URL.indexOf("/commodities") > -1) TEChannels = ['commodities', 'calendar']; else if (TE_URL.indexOf("/crypto") > -1) TEChannels = ['crypto', 'calendar']; else if (TE_URL.indexOf("/forecast/government-bond-10y") > -1) TEChannels = ['bonds', 'calendar']; else if (TE_URL.indexOf("/forecast/commodity") > -1) TEChannels = ['commodities', 'calendar']; else if (TE_URL.indexOf("/currency") > -1 || TE_URL.indexOf("/stock-market") > -1 || TE_URL.indexOf("/commodity/") > -1 || TE_URL.indexOf("/government-bond-yield") > -1) TEChannels = ['market', 'calendar']; else if (TE_URL.split(':').length == 2) TEChannels = ['calendar', 'market']; console.log('IO EPOCH: 1740961995'); console.log('IO IP: 8.222.208.146'); console.log('IO URL: /singapore/calendar');console.log('IO TOKEN: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlcG9jaCI6MTc0MDk2MTk5NSwiaXAiOiI4LjIyMi4yMDguMTQ2IiwidXJsIjoiL3NpbmdhcG9yZS9jYWxlbmRhciJ9.RtB1x3AxR3NP5Tc_HQookcebRV6cHJdH4OdzNKOIisI'); socket = io.connect(socket_url, { withCredentials: true, // Needed for ELB Cookies Stickyness auth: { token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlcG9jaCI6MTc0MDk2MTk5NSwiaXAiOiI4LjIyMi4yMDguMTQ2IiwidXJsIjoiL3NpbmdhcG9yZS9jYWxlbmRhciJ9.RtB1x3AxR3NP5Tc_HQookcebRV6cHJdH4OdzNKOIisI', url: TE_URL } }); socket.on('connect', function () { ioErrorCount = 0; IS_CONNECTED = !0; // Subscribe to the page symbol if (TE_URL.split(':').length == 2 && TESymbol != '') { var socketSymbol = TESymbol.toUpperCase() console.log('IO Subscribe', socketSymbol, 'No lag'); socket.emit('subscribe', { s: [socketSymbol] }) Subscribed.push(socketSymbol) } // Subscribe to channels if (TEChannels && TEChannels.length) { console.log('IO Subscribing to TEChannels', TEChannels); socket.emit('subscribe', { s: TEChannels }) } else { console.log('IO No TEChannels to Subscribe'); } // Subscribe to symbols if (TE_URL != '/' && TE_URL.indexOf("calendar") <= -1 && (TE_URL.split('/').length > 2 || TE_URL.indexOf(":ind") > -1)) { gatherMKTChannels(); if (MKTChannels && MKTChannels.length) { console.log('IO Subscribing to', MKTChannels.length, 'symbols:', MKTChannels); if (MKTChannels.length <= 36) { socket.emit('subscribe', { s: MKTChannels }) } else { console.log('IO Subscribing using Chunks'); var i, j, temparray, chunk = 36; for (i = 0, j = MKTChannels.length; i < j; i += chunk) { temparray = MKTChannels.slice(i, i + chunk); console.log('IO Subscribing to', temparray.length, 'channels:', temparray); socket.emit('subscribe', { s: temparray }) } } } else { console.log('IO No MKTChannels to Subscribe'); } } socket.on('disconnect', function () { IS_CONNECTED = !1; console.log('Got disconnect!') }); socket.on("smooth-disconnect", function () { socket.disconnect() }) }); var isSnap = !0; for (var i = 0; i < TEChannels.length; i++) { channel = TEChannels[i]; if (channel == 'calendar' || channel == 'stream') continue; console.log('IO Snap ' + channel); socket.on(channel, function (a) { a = decryptMessage(a) if (a.length > 0) { for (i = 0; i < a.length; i++) { TE_UpdateTable(a[i], isSnap) TE_UpdateMiniWidget(a[i]) } isSnap = !1 } else { console.log('IO Sent Empty Market Update') } }) } var ioErrorCount = 0; socket.on("connect_error", (err) => { ioErrorCount++; console.log('IO Connect Error', ioErrorCount); console.log(err.message); if (TE_URL.indexOf("calendar") <= -1 && ioErrorCount % 10 == 0) { console.log('Disconnecting IO'); socket.disconnect(); if (ioErrorCount < 100) { var sleepSecs = ioErrorCount * 5; console.log('Connecting again in', sleepSecs, 'seconds'); setInterval(function () { socket.connect() }, sleepSecs * 1000) } else console.log('Stay disconnected'); } }); socket.on('tick', function (t) { t = decryptMessage(t) TE_UpdateTable(t); if (TE_URL.split(':').length == 2) UpdateMarketTick(t); }); function gatherMKTChannels() { // Temporary block to avoid too many symbols return var nMarkets = $("[data-subscribe]").length; console.log("IO data-subscribe tag present in ", nMarkets, "markets") if (nMarkets == null || typeof input !== "undefined") return else if (nMarkets > 600) console.log("IO Skipping [data-subscribe] because of too many symbols") else { console.log("IO Searching [data-subscribe]") var sCount = 0; $("[data-subscribe]").each(function (i, item) { var socketSymbol = $(item).attr('data-subscribe') if (!MKTChannels.includes(socketSymbol) && !Subscribed.includes(socketSymbol)) { sCount++; console.log('IO [data-subscribe]', sCount, socketSymbol) MKTChannels.push(socketSymbol) } else console.log('Already Subscribed. Skip', socketSymbol) }) } } function TE_UpdateTable(d, isSnap) { var s = d.s; let element_price; $('tr[data-symbol="' + s + '"]').each((i, el) => { element_price = $(el).find("td#p"); }) if (element_price == undefined) { return } const p0 = parseFloat(element_price.text()) var r = $('tr[data-symbol="' + s + '"]'); var p = r.find('td#p'); var dec = 4; if (typeof r.data('decimals') !== 'undefined' && r.data('decimals') !== "") dec = r.data("decimals"); if (p0 != d.p.toFixed(dec)) { p.text(d.p.toFixed(dec)); fg = d.nch > 0 ? 'darkgreen' : d.nch < 0 ? 'darkred' : 'black'; if (IsDarkMode) fg = '#fff' triangle = d.nch > 0 ? '<span class="market-positive-image"></span>' : d.nch < 0 ? '<span class="market-negative-image"></span>' : '<span class="market-neutral-image"></span>'; var previous_triangle = r.find('td#triangle'); if (previous_triangle && previous_triangle.length) { previous_triangle.html(triangle) } var nch = r.find('td#nch'); if (nch) { nch.each(function (i, item) { if ($(item).attr("data-no-triangle")) { $(item).text(d.nch.toFixed(dec)); $(item).css("color", fg); $(item).html(Math.abs(d.nch.toFixed(dec))) } else { $(item).text(d.nch.toFixed(dec)); $(item).css("color", fg); $(item).html(triangle + ' ' + Math.abs(d.nch.toFixed(dec))) } }) } var pch = r.find('td#pch'); pch.text(d.pch.toFixed(2) + '%'); if (TEChannels != "market") { nch.attr('data-value', d.nch); pch.attr('data-value', d.pch) } r.find('td#pch') pch.css("color", fg); bg = IsDarkMode == true ? '#254f73' : '#cdebf9'; p.css("backgroundColor", bg); setTimeout(function () { p.css("backgroundColor", 'transparent') }, 1000) if (!isSnap) { var dt = new Date(); var h = dt.getHours(); if (h < 10) { h = "0" + h } var m = dt.getMinutes(); if (m < 10) { m = "0" + m } var ds = [h, m].join(':'); r.find('td#date').html(ds) } if (d.type && d.type == 'index') { var stateColor = '', stateSpan = ''; var state = d.state; if (d.dstate) state = d.dstate; if (state == 'open') stateColor = 'green'; else if (state == 'closed') stateColor = 'red'; else if (state == 'pre') stateColor = '#CFB53B'; else if (state == 'after') stateColor = '#CFB53B'; else { console.log('IO - Unknown Session State', s); return; } if (stateColor != '') { stateSpan = '<span class="bi bi-clock" style="font-size:10px; color: ' + stateColor + '" title="' + state + ' trading session"></span>'; r.find('td#session').html(stateSpan) } } } }; function TE_UpdateMiniWidget(t) { try { function isSameDay(date1, date2) { return ( date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate() ); } if (chart && TE_URL == '/') { if (chart.userOptions.series[0]['symbol'].toLowerCase() == t.s.toLowerCase()) { let seriesData = chart.series[0].data; let lastDataPoint = seriesData[seriesData.length - 1]; let lastDate = new Date(lastDataPoint.x); let currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); let sameDay = isSameDay(lastDate, currentDate) if (sameDay) { const newValue = t.p; const newChang = t.nch; const newP = t.pch; lastDataPoint.update({ y: newValue, change: newChang, percentChange: newP, }); //addCloseLine(); addCustomLabel(newValue); } else { chart.series[0].addPoint( { x: currentDate.getTime(), y: t.p, change: t.nch, percentChange: t.pch, }, true, true ); //addCloseLine() addCustomLabel(t.p) } } } } catch (e) { //console.error("Issues updating mini widget") } } var TENotifications = 0; function TENotification(_title, _text, _url, _importance) { TENotifications++; console.log("IO => Notification => ", _title, _text, _url, _importance, TENotifications); if (TENotifications > 2 & _importance <= 1) return; if (TENotifications > 4 & _importance <= 2) return; var IsDesktop = !1; var _titleHTML = 'ALERT'; var _alertType = 'NEWS'; var _color = "#5bc0de"; if (_importance > 0) { _alertType = 'CALENDAR'; if (_importance > 1) { IsDesktop = !0; _color = '#5cb85c'; if (_importance > 2) _color = '#d9534f' } } if (TELanguage == '') { upsertNotification({ title: _title, text: _text, url: _url, importance: _importance }, false, true); } _titleHTML = '<div style="padding-bottom:10px; font-size: 11px;color: #fff; font-weight: bold;"><span style="background-color: #000; padding: 3px;">' + _alertType + '</span><span style="background-color: ' + _color + '; padding: 3px;">ALERT</span></div>'; var _textHTML = _text; if (_text && _text.length > 200) { console.log("Trim text"); _textHTML = _text.substring(0, 200) + '...'; _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url + '">More</a>' } else if (_text) { _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url + '">More</a>' } PNotify.desktop.permission(); (new PNotify({ title: _titleHTML, text: _textHTML, hide: !0, animation: 'fade', shadow: !0, icon: !1, mouse_reset: !1, delay: 20000, buttons: { sticker: !1, closer_hover: !1 }, addclass: 'custom', })).get().click(function (e) { if ($('.ui-pnotify-closer, .ui-pnotify-closer *').is(e.target)) { console.log("Closed Notification"); return } window.location = _url }); if (IsDesktop) { var _tag = _url + "?v=" + new Date().toISOString().slice(0, 10).replace(/-/g, ""); console.log("PNotify tag", _tag); (new PNotify({ title: _titleHTML, text: _textHTML, hide: !1, animation: 'fade', shadow: !0, icon: !1, mouse_reset: !1, hide: !0, delay: 20000, buttons: { sticker: !1, closer_hover: !1 }, addclass: 'custom', type: 'info', desktop: { desktop: IsDesktop, title: 'TRADING ECONOMICS', text: _text, tag: _tag, fallback: !1 } })).get().click(function (e) { if ($('.ui-pnotify-closer, .ui-pnotify-closer *').is(e.target)) { console.log("Closed Notification"); return } window.location = _url }) } } function TECalendarRowUpdate(c) { console.log("UPDATE CALENDAR ROW"); console.log(c); var $row = $('tr[data-id="' + c.CalendarId + '"]'); console.log($row); var $td = $row.find('span#actual'); console.log($td); $td.text(c.Actual); console.log(c.Actual); console.log($td.text); bg = '#5bc0de'; $td.css("backgroundColor", bg); color = c.Actual.toString().indexOf("-") ? 'darkgreen' : 'darkred'; $td.css("color", color); $row.find('span#previous').text(c.Previous); $row.find('img#incoming').css("display", 'none'); setInterval(function () { $td.css("backgroundColor", '#ffffff') }, 2000) } socket.on('calendar', function (c) { console.log("IO CALENDAR") c = decryptMessage(c) console.log(c); if (c.Importance >= 1) { var _title = c.Country.trim() + ' ' + c.Event.trim(); var _text = _title; if (c.Actual != null && c.Actual != '') _text += ' reported at ' + c.Actual + '. '; if (c.Forecast != null && c.Forecast != '') _text += 'Consensus was ' + c.Forecast + '. '; if (c.Previous != null && c.Previous != '') _text += 'Previously at ' + c.Previous + '.'; var _url = 'https://tradingeconomics.com' + c.URL; if (TE_URL.indexOf("calendar") > -1 || (TELanguage != null && TELanguage.length > 0 && TE_URL == '/')) TECalendarRowUpdate(c); TENotification(_title, _text, _url, c.Importance) } }); socket.on('stream', function (j) { console.log("IO STREAM") j = decryptMessage(j) console.log(j); var _title = j.title; var _description = j.description; var _url = j.url; if (_title && _description && _url) { TENotification(_title, _description, _url, 0) } }); var KILL_SOCKET_AFTER_IDLE = 1000 * 60 * 30; var IS_RELOAD_REQUIRED = !1; var IS_QUESTION_OPEN = !1; var IS_CONNECTED = !1; var LAST_VISIBLE = new Date().getTime(); if (TE_URL.indexOf("calendar") > -1 || TE_URL.indexOf("/currency") > -1 || TE_URL.indexOf("/stock-market") > -1 || TE_URL.indexOf("/commodity/") > -1 || TE_URL.indexOf("/government-bond-yield") > -1 || TE_URL.indexOf("stream") > -1 || TE_URL.indexOf("/currencies") > -1 || TE_URL.indexOf("/stocks") > -1 || TE_URL.indexOf("/bonds") > -1 || TE_URL.indexOf("/commodities") > -1) { KILL_SOCKET_AFTER_IDLE = 1000 * 60 * 60; IS_RELOAD_REQUIRED = !0 } // To be users in market pages ex aapl:us function UpdateMarketTick(t) { if (t.state && t.state == 'closed') { console.log('market is closed'); } var s = t.s; if (!s || s.toLowerCase() != symbol.toLowerCase()) { return; } $('#market_last').html(t.p); $('#market_daily_chg').html(t.nch + ' '); $('#market_daily_Pchg').html(t.pch + '%'); if (t.nch > 0) { $('#market_chg_arrow').attr('class', 'market-positive-image'); $('#market_daily_chg').css({ color: '#8ecf61' }); $('#market_daily_Pchg').css({ color: '#8ecf61' }); } else { $('#market_chg_arrow').attr('class', 'market-negative-image'); $('#market_daily_chg').css({ color: '#ed3b3b' }); $('#market_daily_Pchg').css({ color: '#ed3b3b' }); } } function saveSocketNetworkBW() { console.log("Socket check if alive"); setInterval(function () { if (typeof document == 'undefined' || !document) { console.log("ws: undefined"); return LAST_VISIBLE = new Date().getTime() } if (typeof document.hidden != 'boolean') { console.log("ws: hidden"); return LAST_VISIBLE = new Date().getTime() } if (!document.hidden) { console.log("ws: live"); if (!IS_CONNECTED) { console.log('ws: connecting'); socket.connect() } return LAST_VISIBLE = new Date().getTime() } var now = new Date().getTime(); if (now - LAST_VISIBLE > KILL_SOCKET_AFTER_IDLE) { if (IS_CONNECTED) { console.log('ws: disconnecting'); socket.disconnect(); if (IS_RELOAD_REQUIRED && IS_QUESTION_OPEN == !1) { var result = confirm("Please Press Ok to Refresh the Data in this Page"); IS_QUESTION_OPEN = !0; if (result) { IS_QUESTION_OPEN = !1; document.location = document.location.href } } } } }, 1000 * 60) } saveSocketNetworkBW() // pnotify !function (t, i) { "function" == typeof define && define.amd ? define("pnotify", ["jquery"], function (s) { return i(s, t) }) : "object" == typeof exports && "undefined" != typeof module ? module.exports = i(require("jquery"), global || t) : t.PNotify = i(t.jQuery, t) }("undefined" != typeof window ? window : this, function (t, i) { var s = function (i) { var e, o, n = { dir1: "down", dir2: "left", push: "bottom", spacing1: 36, spacing2: 36, context: t("body"), modal: !1 }, a = t(i), r = function () { o = t("body"), c.prototype.options.stack.context = o, a = t(i), a.bind("resize", function () { e && clearTimeout(e), e = setTimeout(function () { c.positionAll(!0) }, 10) }) }, h = function (i) { var s = t("<div />", { class: "ui-pnotify-modal-overlay" }); return s.prependTo(i.context), i.overlay_close && s.click(function () { c.removeStack(i) }), s }, c = function (t) { this.state = "initializing", this.timer = null, this.animTimer = null, this.styles = null, this.elem = null, this.container = null, this.title_container = null, this.text_container = null, this.animating = !1, this.timerHide = !1, this.parseOptions(t), this.init() }; return t.extend(c.prototype, { version: "3.2.0", options: { title: !1, title_escape: !1, text: !1, text_escape: !1, styling: "brighttheme", addclass: "", cornerclass: "", auto_display: !0, width: "300px", min_height: "16px", type: "notice", icon: !0, animation: "fade", animate_speed: "normal", shadow: !0, hide: !0, delay: 8e3, mouse_reset: !0, remove: !0, insert_brs: !0, destroy: !0, stack: n }, modules: {}, runModules: function (t, i) { var s; for (var e in this.modules) s = "object" == typeof i && e in i ? i[e] : i, "function" == typeof this.modules[e][t] && (this.modules[e].notice = this, this.modules[e].options = "object" == typeof this.options[e] ? this.options[e] : {}, this.modules[e][t](this, "object" == typeof this.options[e] ? this.options[e] : {}, s)) }, init: function () { var i = this; return this.modules = {}, t.extend(!0, this.modules, c.prototype.modules), "object" == typeof this.options.styling ? this.styles = this.options.styling : this.styles = c.styling[this.options.styling], this.elem = t("<div />", { class: "ui-pnotify " + this.options.addclass, css: { display: "none" }, "aria-live": "assertive", "aria-role": "alertdialog", mouseenter: function (t) { if (i.options.mouse_reset && "out" === i.animating) { if (!i.timerHide) return; i.cancelRemove() } i.options.hide && i.options.mouse_reset && i.cancelRemove() }, mouseleave: function (t) { i.options.hide && i.options.mouse_reset && "out" !== i.animating && i.queueRemove(), c.positionAll() } }), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-" + this.options.animate_speed), this.container = t("<div />", { class: this.styles.container + " ui-pnotify-container " + ("error" === this.options.type ? this.styles.error : "info" === this.options.type ? this.styles.info : "success" === this.options.type ? this.styles.success : this.styles.notice), role: "alert" }).appendTo(this.elem), "" !== this.options.cornerclass && this.container.removeClass("ui-corner-all").addClass(this.options.cornerclass), this.options.shadow && this.container.addClass("ui-pnotify-shadow"), !1 !== this.options.icon && t("<div />", { class: "ui-pnotify-icon" }).append(t("<span />", { class: !0 === this.options.icon ? "error" === this.options.type ? this.styles.error_icon : "info" === this.options.type ? this.styles.info_icon : "success" === this.options.type ? this.styles.success_icon : this.styles.notice_icon : this.options.icon })).prependTo(this.container), this.title_container = t("<h4 />", { class: "ui-pnotify-title" }).appendTo(this.container), !1 === this.options.title ? this.title_container.hide() : this.options.title_escape ? this.title_container.text(this.options.title) : this.title_container.html(this.options.title), this.text_container = t("<div />", { class: "ui-pnotify-text", "aria-role": "alert" }).appendTo(this.container), !1 === this.options.text ? this.text_container.hide() : this.options.text_escape ? this.text_container.text(this.options.text) : this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text), "string" == typeof this.options.width && this.elem.css("width", this.options.width), "string" == typeof this.options.min_height && this.container.css("min-height", this.options.min_height), "top" === this.options.stack.push ? c.notices = t.merge([this], c.notices) : c.notices = t.merge(c.notices, [this]), "top" === this.options.stack.push && this.queuePosition(!1, 1), this.options.stack.animation = !1, this.runModules("init"), this.state = "closed", this.options.auto_display && this.open(), this }, update: function (i) { var s = this.options; return this.parseOptions(s, i), this.elem.removeClass("ui-pnotify-fade-slow ui-pnotify-fade-normal ui-pnotify-fade-fast"), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-" + this.options.animate_speed), this.options.cornerclass !== s.cornerclass && this.container.removeClass("ui-corner-all " + s.cornerclass).addClass(this.options.cornerclass), this.options.shadow !== s.shadow && (this.options.shadow ? this.container.addClass("ui-pnotify-shadow") : this.container.removeClass("ui-pnotify-shadow")), !1 === this.options.addclass ? this.elem.removeClass(s.addclass) : this.options.addclass !== s.addclass && this.elem.removeClass(s.addclass).addClass(this.options.addclass), !1 === this.options.title ? this.title_container.slideUp("fast") : this.options.title !== s.title && (this.options.title_escape ? this.title_container.text(this.options.title) : this.title_container.html(this.options.title), !1 === s.title && this.title_container.slideDown(200)), !1 === this.options.text ? this.text_container.slideUp("fast") : this.options.text !== s.text && (this.options.text_escape ? this.text_container.text(this.options.text) : this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text), !1 === s.text && this.text_container.slideDown(200)), this.options.type !== s.type && this.container.removeClass(this.styles.error + " " + this.styles.notice + " " + this.styles.success + " " + this.styles.info).addClass("error" === this.options.type ? this.styles.error : "info" === this.options.type ? this.styles.info : "success" === this.options.type ? this.styles.success : this.styles.notice), (this.options.icon !== s.icon || !0 === this.options.icon && this.options.type !== s.type) && (this.container.find("div.ui-pnotify-icon").remove(), !1 !== this.options.icon && t("<div />", { class: "ui-pnotify-icon" }).append(t("<span />", { class: !0 === this.options.icon ? "error" === this.options.type ? this.styles.error_icon : "info" === this.options.type ? this.styles.info_icon : "success" === this.options.type ? this.styles.success_icon : this.styles.notice_icon : this.options.icon })).prependTo(this.container)), this.options.width !== s.width && this.elem.animate({ width: this.options.width }), this.options.min_height !== s.min_height && this.container.animate({ minHeight: this.options.min_height }), this.options.hide ? s.hide || this.queueRemove() : this.cancelRemove(), this.queuePosition(!0), this.runModules("update", s), this }, open: function () { this.state = "opening", this.runModules("beforeOpen"); var t = this; return this.elem.parent().length || this.elem.appendTo(this.options.stack.context ? this.options.stack.context : o), "top" !== this.options.stack.push && this.position(!0), this.animateIn(function () { t.queuePosition(!0), t.options.hide && t.queueRemove(), t.state = "open", t.runModules("afterOpen") }), this }, remove: function (s) { this.state = "closing", this.timerHide = !!s, this.runModules("beforeClose"); var e = this; return this.timer && (i.clearTimeout(this.timer), this.timer = null), this.animateOut(function () { if (e.state = "closed", e.runModules("afterClose"), e.queuePosition(!0), e.options.remove && e.elem.detach(), e.runModules("beforeDestroy"), e.options.destroy && null !== c.notices) { var i = t.inArray(e, c.notices); -1 !== i && c.notices.splice(i, 1) } e.runModules("afterDestroy") }), this }, get: function () { return this.elem }, parseOptions: function (i, s) { this.options = t.extend(!0, {}, c.prototype.options), this.options.stack = c.prototype.options.stack; for (var e, o = [i, s], n = 0; n < o.length && void 0 !== (e = o[n]); n++)if ("object" != typeof e) this.options.text = e; else for (var a in e) this.modules[a] ? t.extend(!0, this.options[a], e[a]) : this.options[a] = e[a] }, animateIn: function (t) { this.animating = "in"; var i = this, s = function () { i.animTimer && clearTimeout(i.animTimer), "in" === i.animating && (i.elem.is(":visible") ? (t && t.call(), i.animating = !1) : i.animTimer = setTimeout(s, 40)) }; "fade" === this.options.animation ? (this.elem.one("webkitTransitionEnd mozTransitionEnd MSTransitionEnd oTransitionEnd transitionend", s).addClass("ui-pnotify-in"), this.elem.css("opacity"), this.elem.addClass("ui-pnotify-fade-in"), this.animTimer = setTimeout(s, 650)) : (this.elem.addClass("ui-pnotify-in"), s()) }, animateOut: function (i) { this.animating = "out"; var s = this, e = function () { if (s.animTimer && clearTimeout(s.animTimer), "out" === s.animating) if ("0" != s.elem.css("opacity") && s.elem.is(":visible")) s.animTimer = setTimeout(e, 40); else { if (s.elem.removeClass("ui-pnotify-in"), s.options.stack.overlay) { var o = !1; t.each(c.notices, function (t, i) { i != s && i.options.stack === s.options.stack && "closed" != i.state && (o = !0) }), o || s.options.stack.overlay.hide() } i && i.call(), s.animating = !1 } }; "fade" === this.options.animation ? (this.elem.one("webkitTransitionEnd mozTransitionEnd MSTransitionEnd oTransitionEnd transitionend", e).removeClass("ui-pnotify-fade-in"), this.animTimer = setTimeout(e, 650)) : (this.elem.removeClass("ui-pnotify-in"), e()) }, position: function (t) { var i = this.options.stack, s = this.elem; if (void 0 === i.context && (i.context = o), i) { "number" != typeof i.nextpos1 && (i.nextpos1 = i.firstpos1), "number" != typeof i.nextpos2 && (i.nextpos2 = i.firstpos2), "number" != typeof i.addpos2 && (i.addpos2 = 0); var e = !s.hasClass("ui-pnotify-in"); if (!e || t) { i.modal && (i.overlay ? i.overlay.show() : i.overlay = h(i)), s.addClass("ui-pnotify-move"); var n, r, c; switch (i.dir1) { case "down": c = "top"; break; case "up": c = "bottom"; break; case "left": c = "right"; break; case "right": c = "left" }n = parseInt(s.css(c).replace(/(?:\..*|[^0-9.])/g, "")), isNaN(n) && (n = 0), void 0 !== i.firstpos1 || e || (i.firstpos1 = n, i.nextpos1 = i.firstpos1); var p; switch (i.dir2) { case "down": p = "top"; break; case "up": p = "bottom"; break; case "left": p = "right"; break; case "right": p = "left" }switch (r = parseInt(s.css(p).replace(/(?:\..*|[^0-9.])/g, "")), isNaN(r) && (r = 0), void 0 !== i.firstpos2 || e || (i.firstpos2 = r, i.nextpos2 = i.firstpos2), ("down" === i.dir1 && i.nextpos1 + s.height() > (i.context.is(o) ? a.height() : i.context.prop("scrollHeight")) || "up" === i.dir1 && i.nextpos1 + s.height() > (i.context.is(o) ? a.height() : i.context.prop("scrollHeight")) || "left" === i.dir1 && i.nextpos1 + s.width() > (i.context.is(o) ? a.width() : i.context.prop("scrollWidth")) || "right" === i.dir1 && i.nextpos1 + s.width() > (i.context.is(o) ? a.width() : i.context.prop("scrollWidth"))) && (i.nextpos1 = i.firstpos1, i.nextpos2 += i.addpos2 + (void 0 === i.spacing2 ? 25 : i.spacing2), i.addpos2 = 0), "number" == typeof i.nextpos2 && (i.animation ? s.css(p, i.nextpos2 + "px") : (s.removeClass("ui-pnotify-move"), s.css(p, i.nextpos2 + "px"), s.css(p), s.addClass("ui-pnotify-move"))), i.dir2) { case "down": case "up": s.outerHeight(!0) > i.addpos2 && (i.addpos2 = s.height()); break; case "left": case "right": s.outerWidth(!0) > i.addpos2 && (i.addpos2 = s.width()) }switch ("number" == typeof i.nextpos1 && (i.animation ? s.css(c, i.nextpos1 + "px") : (s.removeClass("ui-pnotify-move"), s.css(c, i.nextpos1 + "px"), s.css(c), s.addClass("ui-pnotify-move"))), i.dir1) { case "down": case "up": i.nextpos1 += s.height() + (void 0 === i.spacing1 ? 25 : i.spacing1); break; case "left": case "right": i.nextpos1 += s.width() + (void 0 === i.spacing1 ? 25 : i.spacing1) } } return this } }, queuePosition: function (t, i) { return e && clearTimeout(e), i || (i = 10), e = setTimeout(function () { c.positionAll(t) }, i), this }, cancelRemove: function () { return this.timer && i.clearTimeout(this.timer), this.animTimer && i.clearTimeout(this.animTimer), "closing" === this.state && (this.state = "open", this.animating = !1, this.elem.addClass("ui-pnotify-in"), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-in")), this }, queueRemove: function () { var t = this; return this.cancelRemove(), this.timer = i.setTimeout(function () { t.remove(!0) }, isNaN(this.options.delay) ? 0 : this.options.delay), this } }), t.extend(c, { notices: [], reload: s, removeAll: function () { t.each(c.notices, function (t, i) { i.remove && i.remove(!1) }) }, removeStack: function (i) { t.each(c.notices, function (t, s) { s.remove && s.options.stack === i && s.remove(!1) }) }, positionAll: function (i) { if (e && clearTimeout(e), e = null, c.notices && c.notices.length) t.each(c.notices, function (t, s) { var e = s.options.stack; e && (e.overlay && e.overlay.hide(), e.nextpos1 = e.firstpos1, e.nextpos2 = e.firstpos2, e.addpos2 = 0, e.animation = i) }), t.each(c.notices, function (t, i) { i.position() }); else { var s = c.prototype.options.stack; s && (delete s.nextpos1, delete s.nextpos2) } }, styling: { brighttheme: { container: "brighttheme", notice: "brighttheme-notice", notice_icon: "brighttheme-icon-notice", info: "brighttheme-info", info_icon: "brighttheme-icon-info", success: "brighttheme-success", success_icon: "brighttheme-icon-success", error: "brighttheme-error", error_icon: "brighttheme-icon-error" }, bootstrap3: { container: "alert", notice: "alert-warning", notice_icon: "glyphicon glyphicon-exclamation-sign", info: "alert-info", info_icon: "glyphicon glyphicon-info-sign", success: "alert-success", success_icon: "bi bi-check-lg-sign", error: "alert-danger", error_icon: "glyphicon glyphicon-warning-sign" } } }), c.styling.fontawesome = t.extend({}, c.styling.bootstrap3), t.extend(c.styling.fontawesome, { notice_icon: "fa fa-exclamation-circle", info_icon: "fa fa-info", success_icon: "fa fa-check", error_icon: "fa fa-warning" }), i.document.body ? r() : t(r), c }; return s(i) }); !function (o, s) { "function" == typeof define && define.amd ? define("pnotify.buttons", ["jquery", "pnotify"], s) : "object" == typeof exports && "undefined" != typeof module ? module.exports = s(require("jquery"), require("./pnotify")) : s(o.jQuery, o.PNotify) }("undefined" != typeof window ? window : this, function (o, s) { return s.prototype.options.buttons = { closer: !0, closer_hover: !0, sticker: !0, sticker_hover: !0, show_on_nonblock: !1, labels: { close: "Close", stick: "Stick", unstick: "Unstick" }, classes: { closer: null, pin_up: null, pin_down: null } }, s.prototype.modules.buttons = { init: function (s, i) { var n = this; s.elem.on({ mouseenter: function (o) { !n.options.sticker || s.options.nonblock && s.options.nonblock.nonblock && !n.options.show_on_nonblock || n.sticker.trigger("pnotify:buttons:toggleStick").css("visibility", "visible"), !n.options.closer || s.options.nonblock && s.options.nonblock.nonblock && !n.options.show_on_nonblock || n.closer.css("visibility", "visible") }, mouseleave: function (o) { n.options.sticker_hover && n.sticker.css("visibility", "d-none"), n.options.closer_hover && n.closer.css("visibility", "d-none") } }), this.sticker = o("<div />", { class: "ui-pnotify-sticker", "aria-role": "button", "aria-pressed": s.options.hide ? "false" : "true", tabindex: "0", title: s.options.hide ? i.labels.stick : i.labels.unstick, css: { cursor: "pointer", visibility: i.sticker_hover ? "d-none" : "visible" }, click: function () { s.options.hide = !s.options.hide, s.options.hide ? s.queueRemove() : s.cancelRemove(), o(this).trigger("pnotify:buttons:toggleStick") } }).bind("pnotify:buttons:toggleStick", function () { var i = null === n.options.classes.pin_up ? s.styles.pin_up : n.options.classes.pin_up, e = null === n.options.classes.pin_down ? s.styles.pin_down : n.options.classes.pin_down; o(this).attr("title", s.options.hide ? n.options.labels.stick : n.options.labels.unstick).children().attr("class", "").addClass(s.options.hide ? i : e).attr("aria-pressed", s.options.hide ? "false" : "true") }).append("<span />").trigger("pnotify:buttons:toggleStick").prependTo(s.container), (!i.sticker || s.options.nonblock && s.options.nonblock.nonblock && !i.show_on_nonblock) && this.sticker.css("display", "none"), this.closer = o("<div />", { class: "ui-pnotify-closer", "aria-role": "button", tabindex: "0", title: i.labels.close, css: { cursor: "pointer", visibility: i.closer_hover ? "d-none" : "visible" }, click: function () { s.remove(!1), n.sticker.css("visibility", "d-none"), n.closer.css("visibility", "d-none") } }).append(o("<span />", { class: null === i.classes.closer ? s.styles.closer : i.classes.closer })).prependTo(s.container), (!i.closer || s.options.nonblock && s.options.nonblock.nonblock && !i.show_on_nonblock) && this.closer.css("display", "none") }, update: function (o, s) { !s.closer || o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock ? this.closer.css("display", "none") : s.closer && this.closer.css("display", "block"), !s.sticker || o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock ? this.sticker.css("display", "none") : s.sticker && this.sticker.css("display", "block"), this.sticker.trigger("pnotify:buttons:toggleStick"), this.closer.find("span").attr("class", "").addClass(null === s.classes.closer ? o.styles.closer : s.classes.closer), s.sticker_hover ? this.sticker.css("visibility", "d-none") : o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock || this.sticker.css("visibility", "visible"), s.closer_hover ? this.closer.css("visibility", "d-none") : o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock || this.closer.css("visibility", "visible") } }, o.extend(s.styling.brighttheme, { closer: "brighttheme-icon-closer", pin_up: "brighttheme-icon-sticker", pin_down: "brighttheme-icon-sticker brighttheme-icon-stuck" }), o.extend(s.styling.bootstrap3, { closer: "bi bi-x-lg", pin_up: "glyphicon glyphicon-pause", pin_down: "glyphicon glyphicon-play" }), o.extend(s.styling.fontawesome, { closer: "fa fa-times", pin_up: "fa fa-pause", pin_down: "fa fa-play" }), s }); !function (i, t) { "function" == typeof define && define.amd ? define("pnotify.desktop", ["jquery", "pnotify"], t) : "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("jquery"), require("./pnotify")) : t(i.jQuery, i.PNotify) }("undefined" != typeof window ? window : this, function (i, t) { var o, n = function (i, t) { return (n = "Notification" in window ? function (i, t) { return new Notification(i, t) } : "mozNotification" in navigator ? function (i, t) { return navigator.mozNotification.createNotification(i, t.body, t.icon).show() } : "webkitNotifications" in window ? function (i, t) { return window.webkitNotifications.createNotification(t.icon, i, t.body) } : function (i, t) { return null })(i, t) }; return t.prototype.options.desktop = { desktop: !1, fallback: !0, icon: null, tag: null, title: null, text: null }, t.prototype.modules.desktop = { genNotice: function (i, t) { null === t.icon ? this.icon = "https://sciactive.com/pnotify/includes/desktop/" + i.options.type + ".png" : !1 === t.icon ? this.icon = null : this.icon = t.icon, null !== this.tag && null === t.tag || (this.tag = null === t.tag ? "PNotify-" + Math.round(1e6 * Math.random()) : t.tag), i.desktop = n(t.title || i.options.title, { icon: this.icon, body: t.text || i.options.text, tag: this.tag }), !("close" in i.desktop) && "cancel" in i.desktop && (i.desktop.close = function () { i.desktop.cancel() }), i.desktop.onclick = function () { i.elem.trigger("click") }, i.desktop.onclose = function () { "closing" !== i.state && "closed" !== i.state && i.remove() } }, init: function (i, n) { if (n.desktop) { if (0 !== (o = t.desktop.checkPermission())) return void (n.fallback || (i.options.auto_display = !1)); this.genNotice(i, n) } }, update: function (i, t, n) { 0 !== o && t.fallback || !t.desktop || this.genNotice(i, t) }, beforeOpen: function (i, t) { 0 !== o && t.fallback || !t.desktop || i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in") }, afterOpen: function (i, t) { 0 !== o && t.fallback || !t.desktop || (i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in"), "show" in i.desktop && i.desktop.show()) }, beforeClose: function (i, t) { 0 !== o && t.fallback || !t.desktop || i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in") }, afterClose: function (i, t) { 0 !== o && t.fallback || !t.desktop || (i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in"), "close" in i.desktop && i.desktop.close()) } }, t.desktop = { permission: function () { "undefined" != typeof Notification && "requestPermission" in Notification ? Notification.requestPermission() : "webkitNotifications" in window && window.webkitNotifications.requestPermission() }, checkPermission: function () { return "undefined" != typeof Notification && "permission" in Notification ? "granted" === Notification.permission ? 0 : 1 : "webkitNotifications" in window && 0 == window.webkitNotifications.checkPermission() ? 0 : 1 } }, o = t.desktop.checkPermission(), t }); !function (i, o) { "function" == typeof define && define.amd ? define("pnotify.mobile", ["jquery", "pnotify"], o) : "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("jquery"), require("./pnotify")) : o(i.jQuery, i.PNotify) }("undefined" != typeof window ? window : this, function (i, o) { return o.prototype.options.mobile = { swipe_dismiss: !0, styling: !0 }, o.prototype.modules.mobile = { init: function (i, o) { var t = this, e = null, n = null, s = null; this.swipe_dismiss = o.swipe_dismiss, this.doMobileStyling(i, o), i.elem.on({ touchstart: function (o) { t.swipe_dismiss && (e = o.originalEvent.touches[0].screenX, s = i.elem.width(), i.container.css("left", "0")) }, touchmove: function (o) { if (e && t.swipe_dismiss) { var a = o.originalEvent.touches[0].screenX; n = a - e; var c = (1 - Math.abs(n) / s) * i.options.opacity; i.elem.css("opacity", c), i.container.css("left", n) } }, touchend: function () { if (e && t.swipe_dismiss) { if (Math.abs(n) > 40) { var o = n < 0 ? -2 * s : 2 * s; i.elem.animate({ opacity: 0 }, 100), i.container.animate({ left: o }, 100), i.remove() } else i.elem.animate({ opacity: i.options.opacity }, 100), i.container.animate({ left: 0 }, 100); e = null, n = null, s = null } }, touchcancel: function () { e && t.swipe_dismiss && (i.elem.animate({ opacity: i.options.opacity }, 100), i.container.animate({ left: 0 }, 100), e = null, n = null, s = null) } }) }, update: function (i, o) { this.swipe_dismiss = o.swipe_dismiss, this.doMobileStyling(i, o) }, doMobileStyling: function (o, t) { t.styling ? (o.elem.addClass("ui-pnotify-mobile-able"), i(window).width() <= 480 ? (o.options.stack.mobileOrigSpacing1 || (o.options.stack.mobileOrigSpacing1 = o.options.stack.spacing1, o.options.stack.mobileOrigSpacing2 = o.options.stack.spacing2), o.options.stack.spacing1 = 0, o.options.stack.spacing2 = 0) : (o.options.stack.mobileOrigSpacing1 || o.options.stack.mobileOrigSpacing2) && (o.options.stack.spacing1 = o.options.stack.mobileOrigSpacing1, delete o.options.stack.mobileOrigSpacing1, o.options.stack.spacing2 = o.options.stack.mobileOrigSpacing2, delete o.options.stack.mobileOrigSpacing2)) : (o.elem.removeClass("ui-pnotify-mobile-able"), o.options.stack.mobileOrigSpacing1 && (o.options.stack.spacing1 = o.options.stack.mobileOrigSpacing1, delete o.options.stack.mobileOrigSpacing1), o.options.stack.mobileOrigSpacing2 && (o.options.stack.spacing2 = o.options.stack.mobileOrigSpacing2, delete o.options.stack.mobileOrigSpacing2)) } }, o }); // Test //TE_UpdateTable({ "s": "NDX:IND", "p": 15274.39, "nch": -199.53, "pch": -1.29, "type": "index", "state": "open", "dstate": "open" }, false) //TEST notificationList /*setTimeout(() => { TENotification("United States Core Inflation Rate YoY", "United States Core Inflation Rate YoY reported at 3.3%. Consensus was 3.4%. Previously at 3.4%", "/", "3") }, 25000) setTimeout(() => { TENotification("United States CPI", "United States CPI reported at 314.18. Consensus was 314.63. Previously at 314.07.", "/", "3") }, 30001) setTimeout(() => { TENotification("United States Inflation Rate YoY", "United States Inflation Rate YoY reported at 3.0%. Consensus was 3.1%. Previously at 3.3%.", "/", "3") }, 35002) setTimeout(() => { TENotification("United States Inflation Rate MoM", "United States Inflation Rate MoM reported at -0.1%. Consensus was 0.1%. Previously at 0.0%.", "/", "3") }, 40003) setTimeout(() => { TENotification("United States Core Inflation Rate MoM", "United States Core Inflation Rate MoM reported at 0.1%. Consensus was 0.2%. Previously at 0.2%.", "/", "3") }, 45004)*/ }</script> <script type="text/javascript"> function pageLoad(sender, args) { $(function(){ console.log("Chart Preview JS"); $("[data-chart]").popover({ 'trigger': 'hover', 'html': true, 'content': function () { return "<img src='https://d3fy651gv2fhd3.cloudfront.net/charts/preview.png?w=250&h=150&lbl=0&title=false&url=" + $(this).data('chart') + "'>"; } }); if (typeof doTheChart != 'undefined' && doTheChart) { doTheChart(); } }) }; </script> <script>console.log("Lazy Loading Images");</script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.min.js"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.plugins.min.js"></script> <script> $(function () { $('.lazy').Lazy({ effect: 'fadeIn', effectTime: 500, visibleOnly: true, onError: function (element) { console.log('error loading ' + element.data('src')); } }); }); </script> <script type="text/javascript" src="//d3fy651gv2fhd3.cloudfront.net/js/search.min.js?v=20240502" async></script> <script> TENotificationsHistorical = [] TENotificationsNews = [] //console.log('• Notifications Script Loaded - 20240701') setTimeout(() => { getNotificationsFromCookie() loadBellStatus() },1000) function loadBellStatus() { //console.log("• get bell status from cookie") var seenData = false const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TENewNotifications')); if (cookieData) { seenData = cookieData.split('TENewNotifications=')[1].split(',')[0] } if (seenData == 'true') { //console.log("new notification") $('#notification-new').show() $('#notification-empty').hide() } else { $('#notification-new').hide() $('#notification-empty').show() } } function setNotificationCookieStatus(status) { document.cookie = `TENewNotifications=${status.toString()}; expires=${createExpirationDate('eod')}; path=/`; } function changeIconStatus(isHover) { try { //console.log("change bell") if (TENotificationsHistorical.length > 0 && !isHover) { $('#notification-new').show() $('#notification-empty').hide() setNotificationCookieStatus(true) } else if (TENotificationsNews.length > 0 && !isHover) { $('#notification-new').show() $('#notification-empty').hide() setNotificationCookieStatus(true) } else { $('#notification-new').hide() $('#notification-empty').show() setNotificationCookieStatus(false) } } catch (e) { console.error(e) } } function timeAgo(datetime) { try { const now = new Date(); const diff = now - new Date(datetime); let seconds = Math.floor(diff / 1000); const minuteInSecs = 60; const hourInSecs = minuteInSecs * 60; let timeAgoString; if (seconds < minuteInSecs) { if (seconds == 0) { seconds = 1 } const plural = seconds == 1 ? '' : 's'; timeAgoString = `${seconds} second${plural} ago`; } else if (seconds < hourInSecs) { const minutes = Math.floor(seconds / minuteInSecs); timeAgoString = `${minutes} minutes ago`; } else { const hours = Math.floor(seconds / hourInSecs); const plural = hours > 1 ? 's' : ''; timeAgoString = `${hours} hour${plural} ago`; } return timeAgoString; } catch (e) { console.error(e) } } function createExpirationDate(span) { const expires = new Date(); if (span == '1d') { expires.setDate(expires.getDate() + 1) return expires.toUTCString() } else if (span == '1h') { expires.setHours(expires.getHours() + 1); return expires.toUTCString(); } else if (span == 'eod') { //end of day const expiresTime = new Date(expires.getTime()); expiresTime.setHours(23, 59, 59); return expiresTime.toUTCString(); } } function removeNotificationIndex(i) { try { if (TENotificationsHistorical.length == 0 && TENotificationsNews.length > 0) { TENotificationsNews.splice(i, 1); document.cookie = `TELastNews=${JSON.stringify(TENotificationsNews)}; path=/`; } if (TENotificationsHistorical.length > 0) { TENotificationsHistorical.splice(i, 1); } $('.notification-list').empty(); addNotificationCookie() if (TENotificationsNews.length == 0 || (TENotificationsNews.length == 0 && TENotificationsHistorical.length == 0)) { addEmptyContent() } if (TENotificationsHistorical.length > 0 || TENotificationsNews.length > 0) { upsertNotification(null, true, false) } } catch (e) { console.error(e) } } function addEmptyContent() { try { //console.log("Add Empty Content") const notificationList = $('.notification-list'); notificationList.empty(); //notificationList.append('<div style="display:flex;justify-content:space-between;align-itens:center"><span style="margin-left:18px"><b>Notifications</b></span></div>') let html = `<div class="empty-notificationlist"> <div class="empty-notificationlist-content"> <span>You have no new notifications</span> <br> <i class="bi bi-bell-slash-fill"></i> <br> <div><a href="/stream" title="Show all news" class="empty-notificationlist-more"><div class="btn btn-outline-secondary">All News</div></a></div> </div> </div>`; notificationList.append(html); } catch (e) { console.error(e) } } function addContent() { try { //console.log("AddContent") const notifiList = TENotificationsHistorical.length > 0 ? TENotificationsHistorical : TENotificationsNews; const notificationList = $('.notification-list'); notificationList.empty(); if (notifiList.length > 0) { notificationList.append('<div class="notificationList-first-title"><span style="margin-left:18px"><b>Notifications</b></span><span class="notifications-clean-all" title="Delete all notifications">Clear all</span></div>') for (let i = notifiList.length - 1; i >= 0; i--) { const notification = notifiList[i]; let html = `<div> <div class="card notificationlist-card" style="margin:0;"> <div class="card-body notificationlist-body"> <div class="notificationlist-header"> <div class="notificationlist-header-title"><a href="${notification.url}"><b>${notification.title}</b></a><span class="badge badge-notification-type" style="background-color:${notification.color}">${notification.type}</span></div> <span id="n-${i}" title="Delete" style="cursor:pointer"><i id="cleanIndividualNotif" class="bi bi-trash3"></i></span> </div> <span style="font-size:15px">${notification.text}</span> <div class="notificationlist-footer"> <p>${timeAgo(notification.datetime)}</p> </div> </div> </div> </div>`; notificationList.append(html); $(`#n-${i}`).on('click', function () { removeNotificationIndex(i) }) } notificationList.append('<div class="notificationlist-more-div"><a href="/stream" title="Show more streams" class="notificationlist-more"><div class="btn btn-outline-secondary">More News</div></a></div>') $('.notifications-clean-all').on('click', function () { //console.log("Clicked") notificationList.empty(); if (TENotificationsHistorical.length > 0) { document.cookie = "TENotifications=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/"; TENotificationsHistorical = [] } else if (TENotificationsNews.length > 0) { document.cookie = `TELastNews=[]; path=/`; TENotificationsNews = [] } upsertNotification(null, true, false) }); } } catch (e) { console.error(e) } } function fetchLastNews() { try { //console.log("• Fetch News") TENotificationsNews = [] const newsUrl = '/ws/stream.ashx?start=0&size=3' fetch(newsUrl) .then(response => { if (!response.ok) { console.error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { for (let item of data) { if (item.description.length > 300) { item.description = item.description.substring(0, 300) + ' ...'; let lastPeriodIndex = Math.min(item.description.lastIndexOf('. '), 300); if (lastPeriodIndex !== -1) { item.description = item.description.substring(0, lastPeriodIndex + 1) + '..'; } else { item.description = item.description.substring(0, 300) + '...'; } } TENotificationsNews.unshift({ title: item.title, url: item.url, text: item.description, importance: item.importance, datetime: item.date, type: 'News', color: '#ddd' }) } document.cookie = `TELastNews=${JSON.stringify(TENotificationsNews)}; path=/`; // console.log("• Saved News on Cookies TELastNews") upsertNotification(null, true, false) }) .catch(error => { console.error('Error fetching last news:', error); }); } catch (e) { console.error(e) } } function getNotificationsFromCookie() { try { //console.log("• get Notifications From Cookie") const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TENotifications')); if (cookieData) { let encodedData = cookieData.split('TENotifications=')[1].split(',') //const decrompressedData = pako.inflate(encodedData, { to: 'string' }); try { TENotificationsHistorical = JSON.parse(encodedData); //console.log(TENotificationsHistorical) if (TENotificationsHistorical.length > 0) { upsertNotification(null, true, false) } } catch (error) { console.error("Error parsing existing cookie data:", error); } } } catch (e) { console.error(e) } } function estimateNotificationSize() { return JSON.stringify(TENotificationsHistorical).length; } function getCookieSize() { try { let safeLoop = 0 const cookies = document.cookie.split(';'); let total = 0 for (const cookie of cookies) { if (safeLoop == 50) { return 0; } const [key, value] = cookie.trim().split('='); if (key !== 'TENotifications') { total = total + JSON.stringify(cookie).length + 2 } safeLoop++ } return total; } catch (e) { console.error(e); } } function manageCookieSize(maxSize) { try { //console.log("• Check threshold of cookies size"); const currentCookieSize = getCookieSize(); const currentNotificationsSize = estimateNotificationSize(); let totalBytes = currentCookieSize + currentNotificationsSize; let nLoopCount = 0; //console.log("• Current Cookies Estimated Size: " + currentCookieSize); //console.log("• With Notifications Cookie Estimated Size: " + currentNotificationsSize); if (totalBytes > maxSize) { while (nLoopCount < 10 && totalBytes > maxSize) { //console.log("---------------------> nLoopCount: " + nLoopCount); TENotificationsHistorical.shift(); totalBytes = currentCookieSize + estimateNotificationSize(); //console.log(`• Notification removed to control cookie size. New size: ${totalBytes} bytes`); if (totalBytes <= maxSize) { //console.log(`• Cookie size is already within limit: ${totalBytes} bytes`); break; } nLoopCount++; } }// else { //console.log(`• Cookie size is within limit: ${totalBytes} bytes`); //} } catch (e) { console.error(e); } } function addNotificationCookie() { try { //console.log("• Add Notifications on Cookie"); const isEmptyNews = TENotificationsNews.length === 0; const isEmptyHistorical = TENotificationsHistorical.length === 0; document.cookie = `TELastNews=${isEmptyNews ? '[]' : JSON.stringify(TENotificationsNews)}; path=/`; manageCookieSize(3400); if (isEmptyHistorical) { document.cookie = `TENotifications=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`; } else { document.cookie = `TENotifications=${JSON.stringify(TENotificationsHistorical)}; expires=${createExpirationDate('1d')}; path=/`; } } catch (e) { console.error(e); } } function createDefaultNotification(n) { return { ...n, datetime: new Date(), type: n.importance > 0 ? 'Calendar' : 'News', color: n.importance > 0 ? '#ffb3ba' : '#ddd', }; } function upsertNotification(n, cookie, fromStream) { try { if (TELanguage != '') { return; } //console.log("-----------------------------------------------> Start of upsert Notification on list flow"); //console.log(`• Dealing with ${JSON.stringify(n)}`); if (!cookie) { const newNotification = createDefaultNotification(n); const existingNotification = TENotificationsHistorical.find(item => item.text === newNotification.text); if (existingNotification) { TENotificationsHistorical.splice(TENotificationsHistorical.indexOf(existingNotification), 1); } TENotificationsHistorical.push(newNotification); } const notificationListContainer = $('.offcanvas-top.notification-list.container'); const notificationList = $('.notification-list'); if (!notificationList.length) { notificationListContainer.append(`<div class="offcanvas-header"></div>`); } if (TENotificationsHistorical.length > 0 || TENotificationsNews.length > 0) { if (fromStream == true) { changeIconStatus(false); setNotificationCookieStatus(true); } if (!cookie) { addNotificationCookie(); } addContent(); } else { addEmptyContent(); } } catch (e) { console.error(e); } } $('.btn-notification-list').on('click', function (event) { //console.log('click') event.preventDefault() let cookieNewsIsPresent = false //console.log("• Check if there is LastNews Cookie") const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TELastNews')); if (cookieData) { let cookieNews = cookieData.split('TELastNews=')[1].split(',') cookieNewsIsPresent = true TENotificationsNews = JSON.parse(cookieNews) } //console.log(cookieNewsIsPresent) if (TENotificationsHistorical.length == 0 && TENotificationsNews.length == 0 && !cookieNewsIsPresent) { //console.log("IF") $('.offcanvas-top').removeClass("show") $('.offcanvas-top').removeClass("showing") fetchLastNews() } else { if (TENotificationsNews.length > 0 || TENotificationsHistorical.length > 0) { upsertNotification(null, true, false) } else { addEmptyContent() } } changeIconStatus(true) }); </script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-SZ14JCTXWQ"></script> <script> window.dataLayer = window.dataLayer || []; function ga() { dataLayer.push(arguments); } ga('js', new Date()); ga('config', 'G-SZ14JCTXWQ', { 'allow_google_signals': false }); </script> </body> </html>