×

Calendar

The Calendar class contains properties, and functions for manipulating JavaScript date objects. This class supported by OmniGraffle, OmniFocus, OmniOutliner, and OmniPlan.

Class Properties

Instance Properties

Properties of an instance of the Calendar class:

Calendar.current.locale
Identifier of Current Calendar


Calendar.current.identifier //--> "gregorian"
Locale of Current Calendar


Calendar.current.locale //--> [object Locale: en_US] {calendar: [object Calendar: gregorian], currencyCode: "USD", identifier: "en_US"}
TimeZone of Current Calendar


Calendar.current.timeZone //--> [object TimeZone: America/Los_Angeles (current)] {abbreviation: "PDT", daylightSavingTime: true, secondsFromGMT: -25200}

Instance Functions

The Calendar class contains a set of special functions for manipulating JavaScript Date objects and data.

Today at Midnight


var now = new Date() var today = Calendar.current.startOfDay(now) //--> Wed Oct 14 2020 00:00:00 GMT-0700 (PDT)

DateComponents Class

The DateComponents class represents the elements that comprise a date, such as day, hour, year, and minute.

Constructors

Instance Properties

The properties of an instance of the DateComponents class:

Script examples using the Calendar class instance functions:

Date Components from Date


var date = new Date() var dc = Calendar.current.dateComponentsFromDate(date) dc.month + "/" + dc.day + "/" + dc.year //--> 8/23/21
Date from Components


var dc = new DateComponents() dc.month = 12 dc.day = 31 dc.year = 2021 var date = Calendar.current.dateFromDateComponents(dc) //--> Fri Dec 31 2021 00:00:00 GMT-0800 (PST)
Components Between Dates


var startDate = new Date("8/1/2021") var endDate = new Date("10/15/2021") var result = Calendar.current.dateComponentsBetweenDates(startDate, endDate) console.log(result.month) //--> 2 console.log(result.day) //--> 14

Creating a relative date object 45 days and 17 hours from the start of today:

Generate Relative Future Date/Time


var now = new Date() var today = Calendar.current.startOfDay(now) console.log(today) //--> Wed Oct 14 2020 00:00:00 GMT-0700 (PDT) var duration = new DateComponents() duration.day = 45 duration.hour = 17 var targetDate = Calendar.current.dateByAddingDateComponents(today, duration) console.log(targetDate) //--> Sat Nov 28 2020 17:00:00 GMT-0800 (PST)

A function for retrieving all occurrences of a specified weekday in a specified month. In JavaScript, the index of a weekday is an integer from 0 (Sunday) to 6 (Saturday).

Get All Occurrences of Weekday in Month


function weekdayOccurrencesInMonth(weekdayIndex, monthIndex, yearIndex){ var cal = Calendar.current var dc = new DateComponents() dc.day = 1 dc.month = monthIndex dc.year = yearIndex var monthLength = new Date(yearIndex, monthIndex, 0).getDate() var matchedDates = new Array() for (var i = 1; i < (monthLength + 1); i++) { dc.day = i var d = cal.dateFromDateComponents(dc) if (d.getDay() === weekdayIndex){matchedDates.push(d)} } return matchedDates }

Using the function to get the 2nd Monday of May 2021:

2nd Monday of May 2021


var secondMonday = weekdayOccurrencesInMonth(1, 5, 2021)[1] console.log(secondMonday)

Date Comparison Functions

The properties and functions of the DateComponents class can be used to create comparison functions that check whether the provided date object falls on a specific date or range.

A function that returns true if the provided date/time takes place today:

Does this take place today?


function dateOccursToday(dateToCheck){ var cal = Calendar.current var now = new Date() var midnightToday = cal.startOfDay(now) var dc = cal.dateComponentsFromDate(midnightToday) dc.day = dc.day + 1 var midnightTomorrow = cal.dateFromDateComponents(dc) return ( dateToCheck >= midnightToday && dateToCheck < midnightTomorrow) }}

A function that returns true if the provided date/time took place yesterday:

Did this take place yesterday?


function dateOccurredYesterday(dateToCheck){ var cal = Calendar.current var now = new Date() var midnightToday = cal.startOfDay(now) var dc = cal.dateComponentsFromDate(midnightToday) dc.day = dc.day - 1 var midnightYesterday = cal.dateFromDateComponents(dc) return ( dateToCheck >= midnightYesterday && dateToCheck < midnightToday) }

A function that returns true if the provided date/time takes place tomorrow:

Does this take place tomorrow?


function dateOccursTomorrow(dateToCheck){ var cal = Calendar.current var now = new Date() var midnightToday = cal.startOfDay(now) var dc = cal.dateComponentsFromDate(midnightToday) dc.day = dc.day + 1 var midnightTomorrow = cal.dateFromDateComponents(dc) dc = cal.dateComponentsFromDate(midnightToday) dc.day = dc.day + 2 var dayAfterTomorrow = cal.dateFromDateComponents(dc) return (dateToCheck >= midnightTomorrow && dateToCheck < dayAfterTomorrow) }}

A function that returns true if the provided date/time takes place next week:

Does this take place next week?


function dateOccursNextWeek(dateToCheck){ var fmatr = Formatter.Date.withStyle(Formatter.Date.Style.Short) var weekStart = fmatr.dateFromString('next week') var dc = new DateComponents() dc.day = 7 var followingWeek = Calendar.current.dateByAddingDateComponents(weekStart, dc) return (dateToCheck >= weekStart && dateToCheck < followingWeek) }

A function that returns true if the provided date/time takes place this month:

Does this take place this month?


function dateOccursThisMonth(dateToCheck){ var cal = Calendar.current var currentMonthIndex = cal.dateComponentsFromDate(new Date()).month var targetMonthIndex = cal.dateComponentsFromDate(dateToCheck).month return (targetMonthIndex === currentMonthIndex) }

A function that returns true if the provided date/time takes place next month:

Does this take place next month?


function dateOccursNextMonth(dateToCheck){ var cal = Calendar.current var dc = cal.dateComponentsFromDate(new Date()) dc.day = 1 dc.month = dc.month + 1 var nextMonth = cal.dateFromDateComponents(dc) var nextMonthIndex = cal.dateComponentsFromDate(nextMonth).month var targetMonthIndex = cal.dateComponentsFromDate(dateToCheck).month return (nextMonthIndex === targetMonthIndex) }

A function that returns true if the provided date/time takes place on the provided target date:

Does this take place on target date?


function dateOccursOnTargetDate(dateToCheck, targetDate){ var cal = Calendar.current var targetDateStart = cal.startOfDay(targetDate) var dc = cal.dateComponentsFromDate(targetDateStart) dc.day = dc.day + 1 var dayAfterTargetDate = cal.dateFromDateComponents(dc) return ( dateToCheck >= targetDateStart && dateToCheck < dayAfterTargetDate) }

Date Library

The date comparison functions shown previously have been combined into an Omni Automation library that can be called from within scripts or plug-ins for any of the Omni applications. TAP|CLICK the “Download Library” button to download the library plug-in archive.

The library, once installed, can be loaded and called in scripts using the following statements:

Calling the Date Library
 

var libFile = PlugIn.find("com.omni-automation.all.date-library") var lib = libFile.library("all-date-library") // lib.function-to-call() lib.listFunctions()

The library functions:

Date Library Functions


listFunctions() dateOccursToday(dateToCheck) dateOccurredYesterday(dateToCheck) dateOccursTomorrow(dateToCheck) dateOccursNextWeek(dateToCheck) dateOccursThisMonth(dateToCheck) dateOccursNextMonth(dateToCheck) dateOccursOnTargetDate(dateToCheck,targetDate)

TimeZone Class

Objects that represent a time zone.

Class Properties

The properties of the TimeZone class:

TimeZone.abbreviations
TimeZone Abbreviations


TimeZone.abbreviations //--> ["ADT", "AKDT", "AKST", "ART", "AST", "BDT", "BRST", "BRT", "BST", "CAT", "CDT", "CEST", "CET", "CLST", "CLT", "COT", "CST", "EAT", "EDT", "EEST", "EET", "EST", "GMT", "GST", "HKT", "HST", "ICT", "IRST", "IST", "JST", "KST", "MDT", "MSD", "MSK", "MST", "NDT", "NST", "NZDT", "NZST", "PDT", "PET", "PHT", "PKT", "PST", "SGT", "TRT", "UTC", "WAT", "WEST", "WET", "WIT"]

Constructor

Instance Properties

The properties of an instance of the TimeZone class:

New TimeZone Instance


tzone = new TimeZone("PST") //--> [object TimeZone: America/Los_Angeles (current)] tzone.daylightSavingTime //--> true
 

Locale Class

Objects that represent a locale.

Class Properties

The properties of the Locale class:

Locale Identifiers


Locale.identifiers //--> ["eu", "hr_BA", "en_CM", "en_BI", "rw_RW", "ast", "en_SZ", "he_IL", "ar", "uz_Arab", "en_PN", "as", "en_NF", "ks_IN", "es_KY", "rwk_TZ", "zh_Hant_TW", "en_CN", "gsw_LI", "ta_IN", "th_TH", "es_EA", "fr_GF", "ar_001", "en_RW", "tr_TR", "de_CH", "ee_TG", "en_NG", "fr_TG", "az", "fr_SC", "es_HN", "en_AG", "ccp_IN", "ru_KZ", "gsw", "dyo", "so_ET", "zh_Hant_MO", "de_BE", "nus_SS", "km_KH", "my_MM", "mgh_MZ", "ee_GH", "es_EC", "kw_GB", "rm_CH", "en_ME", "nyn", "mk_MK", "bs_Cyrl_BA", "ar_MR", "es_GL", "en_BM", "ms_Arab", "en_AI", "gl_ES", "en_PR", "ff_CM", "ne_IN", "or_IN", "khq_ML", "en_MG", "pt_TL", "en_LC", "iu_CA", "ta_SG", "jmc_TZ", "om_ET", "lv_LV", "es_US", "en_PT", "vai_Latn_LR", "en_NL", "to_TO", "cgg_UG", "en_MH", "ta", "zu_ZA", "shi_Latn_MA", "es_FK", "ar_KM", "en_AL", "brx_IN", "te", "chr_US", "yo_BJ", "fr_VU", "pa", "tg", "kea", "ksh_DE", "sw_CD", "te_IN", "fr_RE", "th", "ur_IN", "yo_NG", "ti", "es_HT", "es_GP", "guz_KE", "tk", "kl_GL", "ksf_CM", "mua_CM", "lag_TZ", "lb", "fr_TN", "es_PA", "pl_PL", "to", "hi_IN", "dje_NE", "es_GQ", "en_BR", "kok_IN", "pl", "fr_GN", "bem", "ha", "ckb", "es_CA", "lg", "tr", "en_PW", "tt", "en_NO", "nyn_UG", "sr_Latn_RS", "gsw_FR", "pa_Guru", "he", "qu_BO", "ps_AF", "lu_CD", "mgo_CM", "sn_ZW", "en_BS", "da", "ps", "ln", "pt", "hi", "lo", "ebu", "de", "gu_IN", "wo_SN", "seh", "en_CX", "en_ZM", "fr_HT", "fr_GP", "pt_GQ", "lt", "lu", "es_TT", "ln_CD", "vai_Latn", "el_GR", "lv", "en_KE", "sbp", "hr", "en_CY", "es_GT", "twq_NE", "zh_Hant_HK", "kln_KE", "fr_GQ", "chr", "hu", "es_UY", "fr_CA", "ms_BN", "en_NR", "mer", "shi", "es_PE", "fr_SN", "bez", "sw_TZ", "wae_CH", "kkj", "hy", "dz_BT", "en_CZ", "teo_KE", "teo", "en_AR", "ar_JO", "yue_Hans_CN", "mer_KE", "khq", "ln_CF", "nn_NO", "es_SR", "en_MO", "ar_TD", "dz", "ses", "en_BW", "en_AS", "ar_IL", "es_BB", "bo_CN", "nnh", "teo_UG", "hy_AM", "ln_CG", "sr_Latn_BA", "en_MP", "ksb_TZ", "ar_SA", "smn_FI", "ar_LY", "en_AT", "so_KE", "fr_CD", "af_NA", "en_NU", "es_PH", "en_KI", "en_JE", "lkt", "en_AU", "fa_IR", "pt_FR", "uz_Latn_UZ", "zh_Hans_CN", "ewo_CM", "fr_PF", "ca_IT", "es_GY", "en_BZ", "ar_KW", "pt_GW", "fr_FR", "am_ET", "en_VC", "es_DM", "fr_DJ", "fr_CF", "es_SV", "en_MS", "pt_ST", "ar_SD", "luy_KE", "gd_GB", "de_LI", "it_VA", "fr_CG", "pt_CH", "ckb_IQ", "zh_Hans_SG", "en_MT", "ha_NE", "en_ID", "ewo", "af_ZA", "os_GE", "om_KE", "nl_SR", "es_ES", "es_DO", "ar_IQ", "fr_CH", "nnh_CM", "es_SX", "es_419", "en_MU", "en_US_POSIX", "yav_CM", "luo_KE", "dua_CM", "et_EE", "en_IE", "ak_GH", "rwk", "es_CL", "kea_CV", "fr_CI", "ckb_IR", "fr_BE", "se", "en_NZ", "en_MV", "en_LR", "es_PM", "en_KN", "nb_SJ", "ha_NG", "sg", "sr_Cyrl_RS", "ru_RU", "en_ZW", "sv_AX", "ga_IE", "si", "wo", "en_VG", "ff_MR", "ky_KG", "agq_CM", "mzn", "fr_BF", "naq_NA", "mr_IN", "en_MW", "de_AT", "az_Latn", "en_LS", "ka", "sk", "sl", "sn", "sr_Latn_ME", "fr_NC", "so", "is_IS", "twq", "ig_NG", "sq", "fo_FO", "sr", "tzm", "ga", "om", "en_LT", "bas_CM", "se_NO", "ki", "nl_BE", "ar_QA", "gd", "sv", "kk", "rn_BI", "es_CO", "az_Latn_AZ", "kl", "or", "es_AG", "ca", "en_VI", "km", "os", "sw", "en_MY", "kn", "en_LU", "fr_SY", "ar_TN", "en_JM", "fr_PM", "ko", "fr_NE", "ce", "fr_MA", "gl", "ru_MD", "es_BL", "saq_KE", "ks", "fr_CM", "lb_LU", "gv_IM", "fr_BI", "en_LV", "en_KR", "es_NI", "en_GB", "kw", "nl_SX", "dav_KE", "tr_CY", "ky", "en_UG", "es_BM", "en_TC", "es_AI", "ar_EG", "fr_BJ", "gu", "es_PR", "fr_RW", "gv", "lrc_IQ", "sr_Cyrl_BA", "es_MF", "fr_MC", "cs", "bez_TZ", "es_CR", "asa_TZ", "ar_EH", "fo_DK", "ms_Arab_BN", "ccp", "en_JP", "sbp_TZ", "en_IL", "lt_LT", "mfe", "en_GD", "es_LC", "cy", "ug_CN", "ca_FR", "es_BO", "en_SA", "fr_BL", "bn_IN", "uz_Cyrl_UZ", "lrc_IR", "az_Cyrl", "en_IM", "sw_KE", "en_SB", "pa_Arab", "ur_PK", "haw_US", "ar_SO", "en_IN", "fil", "fr_MF", "en_WS", "es_CU", "es_BQ", "ja_JP", "fy_NL", "en_SC", "yue_Hant_HK", "en_IO", "pt_PT", "en_HK", "en_GG", "fr_MG", "de_LU", "tzm_MA", "es_BR", "en_TH", "en_SD", "nds_DE", "shi_Tfng", "ln_AO", "as_IN", "en_GH", "ms_MY", "ro_RO", "jgo_CM", "es_CW", "dua", "en_UM", "es_BS", "en_SE", "kn_IN", "en_KY", "vun_TZ", "kln", "lrc", "en_GI", "ca_ES", "rof", "pt_CV", "kok", "pt_BR", "ar_DJ", "yi_001", "fi_FI", "zh", "es_PY", "ar_SS", "mua", "sr_Cyrl_ME", "vai_Vaii_LR", "en_001", "nl_NL", "en_TK", "fr_DZ", "en_SG", "ca_AD", "si_LK", "sv_SE", "pt_AO", "vi", "xog_UG", "xog", "en_IS", "nb", "seh_MZ", "es_AR", "sk_SK", "en_SH", "ti_ER", "nd", "az_Cyrl_AZ", "zu", "ne", "nd_ZW", "el_CY", "en_IT", "nl_BQ", "da_GL", "ja", "rm", "fr_ML", "rn", "en_VU", "rof_TZ", "ro", "ebu_KE", "ru_KG", "en_SI", "sg_CF", "mfe_MU", "nl", "brx", "bs_Latn", "fa", "zgh_MA", "en_GM", "shi_Latn", "en_FI", "nn", "en_EE", "ru", "yue", "kam_KE", "fur", "vai_Vaii", "ar_ER", "rw", "ti_ET", "ff", "luo", "fa_AF", "nl_CW", "es_MQ", "en_HR", "en_FJ", "fi", "pt_MO", "be", "en_US", "en_TO", "en_SK", "bg", "ru_BY", "it_IT", "ml_IN", "gsw_CH", "qu_EC", "fo", "sv_FI", "en_FK", "nus", "ta_LK", "vun", "sr_Latn", "es_BZ", "fr", "en_SL", "bm", "es_VC", "ar_BH", "guz", "bn", "bo", "ar_SY", "es_MS", "lo_LA", "ne_NP", "uz_Latn", "be_BY", "es_IC", "sr_Latn_XK", "ar_MA", "pa_Guru_IN", "br", "luy", "kde_TZ", "es_AW", "bs", "fy", "fur_IT", "hu_HU", "ar_AE", "en_HU", "sah_RU", "zh_Hans", "en_FM", "fr_MQ", "ko_KP", "en_150", "en_DE", "ce_RU", "en_CA", "hsb_DE", "sq_AL", "en_TR", "ro_MD", "es_VE", "tg_TJ", "fr_WF", "mt_MT", "kab", "nmg_CM", "ms_SG", "en_GR", "ru_UA", "fr_MR", "zh_Hans_MO", "de_IT", "ccp_BD", "ff_GN", "bs_Cyrl", "tt_RU", "nds_NL", "es_KN", "sw_UG", "yue_Hans", "ko_KR", "en_DG", "bo_IN", "en_CC", "shi_Tfng_MA", "lag", "it_SM", "os_RU", "en_TT", "ms_Arab_MY", "sq_MK", "es_VG", "bem_ZM", "kde", "ar_OM", "kk_KZ", "cgg", "bas", "kam", "wae", "es_MX", "sah", "zh_Hant", "en_GU", "fr_MU", "fr_KM", "ar_LB", "en_BA", "en_TV", "sr_Cyrl", "mzn_IR", "es_VI", "dje", "kab_DZ", "fil_PH", "se_SE", "vai", "hr_HR", "bs_Latn_BA", "nl_AW", "dav", "so_SO", "ar_PS", "en_FR", "uz_Cyrl", "ff_SN", "en_BB", "ki_KE", "en_TW", "naq", "en_SS", "mg_MG", "mas_KE", "en_RO", "en_PG", "mgh", "dyo_SN", "mas", "agq", "bn_BD", "haw", "yi", "nb_NO", "da_DK", "en_DK", "saq", "ug", "cy_GB", "fr_YT", "jmc", "ses_ML", "en_PH", "de_DE", "ar_YE", "es_TC", "bm_ML", "yo", "lkt_US", "uz_Arab_AF", "jgo", "sl_SI", "pt_LU", "uk", "en_CH", "asa", "en_BD", "lg_UG", "nds", "qu_PE", "mgo", "id_ID", "en_NA", "en_GY", "zgh", "pt_MZ", "fr_LU", "dsb", "mas_TZ", "en_DM", "ta_MY", "es_GD", "en_BE", "mg", "ur", "fr_GA", "ka_GE", "nmg", "en_TZ", "eu_ES", "ar_DZ", "id", "so_DJ", "hsb", "yav", "mk", "pa_Arab_PK", "ml", "en_ER", "ig", "se_FI", "mn", "ksb", "uz", "vi_VN", "ii", "qu", "en_PK", "ee", "ast_ES", "yue_Hant", "mr", "ms", "en_ES", "ha_GH", "it_CH", "sq_XK", "mt", "en_CK", "br_FR", "en_BG", "es_GF", "tk_TM", "sr_Cyrl_XK", "ksf", "en_SX", "bg_BG", "en_PL", "af", "el", "cs_CZ", "fr_TD", "zh_Hans_HK", "is", "ksh", "my", "mn_MN", "en", "it", "dsb_DE", "ii_CN", "eo", "iu", "en_ZA", "smn", "en_AD", "ak", "en_RU", "kkj_CM", "am", "es", "et", "uk_UA"]

Constructors

Instance Properties

The properties of an instance of the Locale class:

New Locale Instance


var loc = new Locale("en_US") loc.calendar //--> [object Calendar: gregorian]

Using the currencyCode property of the Locale class to retrieve the currency code for Sweden:

Currency Code for Sweden


new Locale("sv_SE").currencyCode //--> "SEK"

Using the currencyCode property with the Decimal Formatter class to express a numeric amount as Swedish Kroner:

Amount in Swedish Kroner


var currencyCode = new Locale("sv_SE").currencyCode var fmtr = Formatter.Decimal.currency(currencyCode) var dVal = Decimal.fromString('12345') fmtr.stringFromDecimal(dVal) //--> SEK12,345.00

Reference Links

Currency Codes

Currency Codes


"AED" "United Arab Emirates Dirham" "AFN" "Afghan Afghani" "ALL" "Albanian Lek" "AMD" "Armenian Dram" "ANG" "Netherlands Antillean Guilder" "AOA" "Angolan Kwanza" "ARS" "Argentine Peso" "AUD" "Australian Dollar" "AWG" "Aruban Florin" "AZN" "Azerbaijani Manat" "BAM" "Bosnia-Herzegovina Convertible Mark" "BBD" "Barbadian Dollar" "BDT" "Bangladeshi Taka" "BGN" "Bulgarian Lev" "BHD" "Bahraini Dinar" "BIF" "Burundian Franc" "BMD" "Bermudan Dollar" "BND" "Brunei Dollar" "BOB" "Bolivian Boliviano" "BRL" "Brazilian Real" "BSD" "Bahamian Dollar" "BTC" "Bitcoin" "BTN" "Bhutanese Ngultrum" "BWP" "Botswanan Pula" "BYN" "Belarusian Ruble" "BZD" "Belize Dollar" "CAD" "Canadian Dollar" "CDF" "Congolese Franc" "CHF" "Swiss Franc" "CLF" "Chilean Unit of Account (UF)" "CLP" "Chilean Peso" "CNH" "Chinese Yuan (Offshore)" "CNY" "Chinese Yuan" "COP" "Colombian Peso" "CRC" "Costa Rican Colón" "CUC" "Cuban Convertible Peso" "CUP" "Cuban Peso" "CVE" "Cape Verdean Escudo" "CZK" "Czech Republic Koruna" "DJF" "Djiboutian Franc" "DKK" "Danish Krone" "DOP" "Dominican Peso" "DZD" "Algerian Dinar" "EGP" "Egyptian Pound" "ERN" "Eritrean Nakfa" "ETB" "Ethiopian Birr" "EUR" "Euro" "FJD" "Fijian Dollar" "FKP" "Falkland Islands Pound" "GBP" "British Pound Sterling" "GEL" "Georgian Lari" "GGP" "Guernsey Pound" "GHS" "Ghanaian Cedi" "GIP" "Gibraltar Pound" "GMD" "Gambian Dalasi" "GNF" "Guinean Franc" "GTQ" "Guatemalan Quetzal" "GYD" "Guyanaese Dollar" "HKD" "Hong Kong Dollar" "HNL" "Honduran Lempira" "HRK" "Croatian Kuna" "HTG" "Haitian Gourde" "HUF" "Hungarian Forint" "IDR" "Indonesian Rupiah" "ILS" "Israeli New Sheqel" "IMP" "Manx pound" "INR" "Indian Rupee" "IQD" "Iraqi Dinar" "IRR" "Iranian Rial" "ISK" "Icelandic Króna" "JEP" "Jersey Pound" "JMD" "Jamaican Dollar" "JOD" "Jordanian Dinar" "JPY" "Japanese Yen" "KES" "Kenyan Shilling" "KGS" "Kyrgystani Som" "KHR" "Cambodian Riel" "KMF" "Comorian Franc" "KPW" "North Korean Won" "KRW" "South Korean Won" "KWD" "Kuwaiti Dinar" "KYD" "Cayman Islands Dollar" "KZT" "Kazakhstani Tenge" "LAK" "Laotian Kip" "LBP" "Lebanese Pound" "LKR" "Sri Lankan Rupee" "LRD" "Liberian Dollar" "LSL" "Lesotho Loti" "LYD" "Libyan Dinar" "MAD" "Moroccan Dirham" "MDL" "Moldovan Leu" "MGA" "Malagasy Ariary" "MKD" "Macedonian Denar" "MMK" "Myanma Kyat" "MNT" "Mongolian Tugrik" "MOP" "Macanese Pataca" "MRO" "Mauritanian Ouguiya (pre-2018)" "MRU" "Mauritanian Ouguiya" "MUR" "Mauritian Rupee" "MVR" "Maldivian Rufiyaa" "MWK" "Malawian Kwacha" "MXN" "Mexican Peso" "MYR" "Malaysian Ringgit" "MZN" "Mozambican Metical" "NAD" "Namibian Dollar" "NGN" "Nigerian Naira" "NIO" "Nicaraguan Córdoba" "NOK" "Norwegian Krone" "NPR" "Nepalese Rupee" "NZD" "New Zealand Dollar" "OMR" "Omani Rial" "PAB" "Panamanian Balboa" "PEN" "Peruvian Nuevo Sol" "PGK" "Papua New Guinean Kina" "PHP" "Philippine Peso" "PKR" "Pakistani Rupee" "PLN" "Polish Zloty" "PYG" "Paraguayan Guarani" "QAR" "Qatari Rial" "RON" "Romanian Leu" "RSD" "Serbian Dinar" "RUB" "Russian Ruble" "RWF" "Rwandan Franc" "SAR" "Saudi Riyal" "SBD" "Solomon Islands Dollar" "SCR" "Seychellois Rupee" "SDG" "Sudanese Pound" "SEK" "Swedish Krona" "SGD" "Singapore Dollar" "SHP" "Saint Helena Pound" "SLL" "Sierra Leonean Leone" "SOS" "Somali Shilling" "SRD" "Surinamese Dollar" "SSP" "South Sudanese Pound" "STD" "São Tomé and Príncipe Dobra (pre-2018)" "STN" "São Tomé and Príncipe Dobra" "SVC" "Salvadoran Colón" "SYP" "Syrian Pound" "SZL" "Swazi Lilangeni" "THB" "Thai Baht" "TJS" "Tajikistani Somoni" "TMT" "Turkmenistani Manat" "TND" "Tunisian Dinar" "TOP" "Tongan Pa anga" "TRY" "Turkish Lira" "TTD" "Trinidad and Tobago Dollar" "TWD" "New Taiwan Dollar" "TZS" "Tanzanian Shilling" "UAH" "Ukrainian Hryvnia" "UGX" "Ugandan Shilling" "USD" "United States Dollar" "UYU" "Uruguayan Peso" "UZS" "Uzbekistan Som" "VEF" "Venezuelan Bolívar Fuerte (Old)" "VES" "Venezuelan Bolívar Soberano" "VND" "Vietnamese Dong" "VUV" "Vanuatu Vatu" "WST" "Samoan Tala" "XAF" "CFA Franc BEAC" "XAG" "Silver Ounce" "XAU" "Gold Ounce" "XCD" "East Caribbean Dollar" "XDR" "Special Drawing Rights" "XOF" "CFA Franc BCEAO" "XPD" "Palladium Ounce" "XPF" "CFP Franc" "XPT" "Platinum Ounce" "YER" "Yemeni Rial" "ZAR" "South African Rand" "ZMW" "Zambian Kwacha" "ZWL" "Zimbabwean Dollar"