Skip to content

Instantly share code, notes, and snippets.

View spatialtime's full-sized avatar
🎨
Focusing

Matt Savage spatialtime

🎨
Focusing
View GitHub Profile
@spatialtime
spatialtime / format_iso_yminterval.plsql
Last active June 8, 2020 23:14
A PL/SQL function that formats an Oracle INTERVAL YEAR TO MONTH value to a conformant ISO 8601 string.
CREATE OR REPLACE FUNCTION format_iso_yminterval(interval_in INTERVAL YEAR TO MONTH) RETURN VARCHAR2
IS
iso_out VARCHAR2(14) := 'P';
year NUMBER;
month NUMBER;
BEGIN
year := EXTRACT(YEAR FROM interval_in);
IF year <> 0 THEN
iso_out := iso_out || year || 'Y';
@spatialtime
spatialtime / format_iso_dsinterval.plsql
Created June 8, 2020 23:12
A PL/SQL function that formats an Oracle INTERVAL DAY TO SECOND value to a conformant ISO 8601 duration string.
CREATE OR REPLACE FUNCTION format_iso_dsinterval(interval_in INTERVAL DAY TO SECOND) RETURN VARCHAR2
IS
--max value ever would be 'P999999999DT59H59M59.999999999S', a 31-char string
l_iso VARCHAR2(31) := 'P';
l_day NUMBER;
l_hour NUMBER;
l_minute NUMBER;
l_second NUMBER;
BEGIN
@spatialtime
spatialtime / parse_isoweek.plsql
Last active June 8, 2020 20:47
Parse an ISO 8601 week string (YYYY-Www or YYYY-Www-D) to an Oracle DATE value. Oracle's TO_*datetime functions do not support ISO year 'IYYY' Or ISO week 'IW' format model elements.
CREATE OR REPLACE FUNCTION parse_isoweek(isostring_in STRING) RETURN DATE
IS
l_year_start DATE;
l_year VARCHAR2(4);
l_week VARCHAR2(2);
l_day VARCHAR2(1);
l_date DATE;
--c_pattern allows for 'YYYY-Www' and 'YYYY-Www-d' formats.
c_pattern CONSTANT VARCHAR2(33) := '^(\d{4})-W([0-5]\d)((-)([1-7]))?$';
@spatialtime
spatialtime / iso8601_ordinaldate.go
Last active May 23, 2020 01:58
Golang and ISO 8601 ordinal dates
// This snippet demonstrates Golang formatting and parsing of
// ISO 8601 ordinal dates (4-digit year + "-" + ordinal day).
// Note: an ordinal day in this context is the nth day of
// the year, with Jan 1 being ordinal day 1 and Dec 31
// of non-leap year (a "common year") being day 365.
import (
"time"
)
@spatialtime
spatialtime / iso8601_week.go
Created May 23, 2020 01:48
Demonstrates Golang formatting and parsing of ISO 8601 weeks
// This snippet demonstrates Golang formatting and parsing of ISO 8601 weeks.
import (
"errors"
"fmt"
"regexp"
"strconv"
"time"
)
@spatialtime
spatialtime / iso8601_duration.go
Last active May 12, 2024 02:23
Golang and ISO 8601 durations
// This snippet demonstrates Golang formatting and parsing of ISO 8601 durations.
// A little work is required to navigate between Golang's
// duration syntax and ISO 8601 duration syntax.
import (
"errors"
"fmt"
"regexp"
"strings"
"time"
@spatialtime
spatialtime / iso8601_weeks.js
Created May 21, 2020 19:45
JavaScript code for parsing and formatting ISO 8601 weeks
//------------------------------------------------------------------------------
// Constants
//------------------------------------------------------------------------------
const MIN_YEAR =1;
const MAX_YEAR = 9999;
const MIN_MONTH = 1;
const MAX_MONTH = 12;
const MIN_DAY = 1;
const MIN_HOUR = 0;
const MAX_HOUR = 24;
@spatialtime
spatialtime / iso8601_ordinal_dates.js
Last active May 23, 2020 01:58
JavaScript and ISO 8601 ordinal dates
//------------------------------------------------------------------------------
// Constants
//------------------------------------------------------------------------------
const MIN_YEAR =1;
const MAX_YEAR = 9999;
const MIN_MONTH = 1;
const MAX_MONTH = 12;
const MIN_DAY = 1;
const MIN_HOUR = 0;
const MAX_HOUR = 24;
@spatialtime
spatialtime / iso8601_parse_datetimes.js
Created May 21, 2020 19:31
JavaScript code for parsing an ISO 8601 string to a JavaScript Date instance.
/*
* dateFromISODatetime creates a JavaScript date from a string that adheres to
* ECMAScript's specified syntax:
* Zulu/UTC time:
* YYYY-MM-DDTHH:mm:ss.sssZ
* Specified time zone offset:
* YYYY-MM-DDTHH:mm:ss.sss±HH:mm
* Local time (no time zone specification):
* YYYY-MM-DDTHH:mm:ss.sss
*/
@spatialtime
spatialtime / iso8601_extract_datetimes.js
Created May 12, 2020 22:33
JavaScript code for extracting ISO 8601 dates/time fields from a JavaScript Date object.
// Passing a string to new Date() is cross-implementation-safe only if the
// format of the string conforms to ECMAScript's specified format.
// From the specification (https://tc39.es/ecma262/#sec-date.parse):
// " If the String does not conform to that format the function may fall
// back to any implementation-specific heuristics or implementation-specific date formats. "
// As such, we are good to go here with passing it a correct ISO 8601 date/time string.
let d = new Date("2020-04-02T13:00:00.000Z")
// The beauty of a fixed-width ISO 8601 output string.