Echo JS 0.11.0

<~>

tracker1 comments

tracker1 2061 days ago. link 1 point ▲ ▼
Added the "(Commercial Services)" tag... this article is a bit more than roughly a howto for a single commercial service, so didn't want to just delete it.
tracker1 2066 days ago. link 2 points ▲ ▼
Would suggest environment variables instead of a config file.
tracker1 2066 days ago. link 1 point ▲ ▼
Looks like I can do what I need with tz-offset, which is only ~18k unpacked compared to close to moment/moment-timezone which are MASSIVE.

    var tzOffset = require("tz-offset")

    function todayAtTime(input /*17:00*/) {
      const now = new Date();
      const y = now.getFullYear();
      const m = `0${now.getMonth() + 1}`.substr(-2);
      const d = `0${now.getDate()}`.substr(-2);
      
      const ret = `${y}-${m}-${d}T${input}`;
      return ret;
    }

    function inDst(dtm) {
        const dstStart = new Date(dtm.getFullYear(), 2/*Mar*/, 14, 2);
        const dstEnd = new Date(dtm.getFullYear(), 10/*Nov*/, 7, 3);
        return (dtm < dstStart || dtm > dstEnd);
    }

    function parseAsTimezone(input, timezone, noDst) {
        const dtm = new Date(input);
        dtm.setMinutes(
            dtm.getMinutes() 
            + (-1 * dtm.getTimezoneOffset())
            + tzOffset.offsetOf(timezone)
        );
        
        const dstStart = new Date(dtm.getFullYear(), 2/*Mar*/, 14, 2);
        const dstEnd = new Date(dtm.getFullYear(), 10/*Nov*/, 7, 3)
        
        if (noDst) return dtm;
        
        switch (timezone) {
            case "America/Phoenix":
                // todo: other timezones without dst    
                break;
            default:
                if (inDst(dtm)) {
                    dtm.setHours(dtm.getHours() - 1);
                }
        }
        return dtm;
    }

    function todayAtTimezone(time, timezone) {
      return parseAsTimezone(todateAtTime(time), timezone);
    }

    // Phoenix same as Denver
    console.log(parseAsTimezone('2021-01-01T15:00:00','America/Los_Angeles').toJSON());
    console.log(parseAsTimezone('2021-01-01T15:00:00','America/Denver').toJSON());
    console.log(parseAsTimezone('2021-01-01T15:00:00','America/Phoenix').toJSON());


    // Phoenix same as LA
    console.log(parseAsTimezone('2021-05-01T15:00:00','America/Los_Angeles').toJSON());
    console.log(parseAsTimezone('2021-05-01T15:00:00','America/Denver').toJSON());
    console.log(parseAsTimezone('2021-05-01T15:00:00','America/Phoenix').toJSON());

    // Getting the Time set for a give IATA timezone TODAY
    console.log(todayAtTimezone('15:00', 'America/Los_Angeles').toJSON())
    console.log(todayAtTimezone('15:00', 'America/Denver').toJSON())
    console.log(todayAtTimezone(‘15:00', 'America/Phoenix').toJSON())
tracker1 2066 days ago. link 1 point ▲ ▼
Seems like there could be some interesting uses.. but as it stands, the README doesn't match the interfaces, and playing with it on RunKit, I couldn't manage to get it working.

What I'd really like to do, would be to parse a given date as a TimeZone...

for examples:

    // local date, but not the right timezone
    var dtm = new Date('2021-02-21T15:00:00');

    // will now be local time on the host.
    var fixed = global.parseWithTimezone(
      '2021-02-21T15:00:00',
      'America/Phoenix'
    );

    // correct UTC value from date time as Phoenix time.
    fixed.toJSON(); // 2021-02-21T22:00:00.000Z


aside: This uses `moment` and `moment-timezone` which you should never use in the browser if you can avoid it.. these libraries are MASSIVE.
tracker1 2070 days ago. link 2 points ▲ ▼
May actually switch to a tweaked version of this. Minor adjustment on font order, and adding a font family set for code/pre elements.
tracker1 2070 days ago. link 1 point ▲ ▼
Definitely worth adding a Star and bookmarking... some of the references are a little dated, but well worth it.
tracker1 2073 days ago. link 1 point ▲ ▼
Edited to recorded Twitch stream archive, since it's not accessible on the link posted.
tracker1 2075 days ago. link 1 point ▲ ▼
If you're using a Proxy, it's best to use a function to create the proxy and handlers, in order to isolate/abstract any Map/Object used for stowing data outside the object being observed.
tracker1 2075 days ago. link 1 point ▲ ▼
This is poor advice these days... most tooling is/has moved towards module patterns that isolate code based on modules.  Most browsers even have built in support for javascript modules at this point, and there are ever more sites that publish the likes of npm as ecmascript modules for easier use in that fashion.

Currently, these are a bit slower than what bundlers can do, but is definitely the way forward... this advice seems like a flashback to pre-2010 advice for JavaScript.  This really started to change in 2010-2012 with Browserify with 6to5 and later Webpack and Babel (renamed 6to5).  Now there's more options including Parcel, TypeScript, Babel, Webpack and others.
[more]