vue-luxon
Version:
Easy use of DateTime formatting & parsing in Vue using Luxon
2 lines (1 loc) • 3.99 kB
JavaScript
import{DateTime as t}from"luxon";var e=function(){for(var t=arguments,o={},r=0,n=arguments.length;r<n;++r){var u=t[r];if(u)for(var a in u)u.hasOwnProperty(a)&&u[a]&&("[object Object]"!==Object.prototype.toString.call(u[a])?o[a]=u[a]:o[a]=e(o[a],u[a]))}return o},o={full:t.DATETIME_FULL,fulls:t.DATETIME_FULL_WITH_SECONDS,huge:t.DATETIME_HUGE,huges:t.DATETIME_HUGE_WITH_SECONDS,med:t.DATETIME_MED,meds:t.DATETIME_MED_WITH_SECONDS,short:t.DATETIME_SHORT,shorts:t.DATETIME_SHORT_WITH_SECONDS,date_full:t.DATE_FULL,date_huge:t.DATE_HUGE,date_med:t.DATE_MED,date_medd:t.DATE_MED_WITH_WEEKDAY,date_short:t.DATE_SHORT,time24:t.TIME_24_SIMPLE,time24longoffset:t.TIME_24_WITH_LONG_OFFSET,time24s:t.TIME_24_WITH_SECONDS,time:t.TIME_SIMPLE,times:t.TIME_WITH_SECONDS},r={relative:{format:"relative"},server:{zone:"utc",format:"iso"},client:{zone:"local",format:"med"},inputdate:{zone:"client",format:"yyyy-MM-dd"}};Object.keys(o).forEach((function(t){r[t]={format:o[t]}}));var n={templates:{},input:{zone:"utc",format:"iso"},output:{zone:"local",format:{year:"numeric",month:"long",day:"numeric"},locale:null,relative:{round:!0,unit:null}},parse:!1};function u(e,o){if("object"!=typeof o.input)throw"`input` is not an object, but: "+o.input;if("object"!=typeof o.output)throw"`output` is not an object, but: "+o.output;var r=function(e,o,r){if(!e)return"never";var n=e,u=o,a=r;switch(u.toLowerCase()){case"sql":return t.fromSQL(n,{zone:a});case"iso":return t.fromISO(n,{zone:a});case"http":return t.fromHTTP(n,{zone:a});case"jsdate":return t.fromJSDate(n,{zone:a});case"rfc2822":return t.fromRFC2822(n,{zone:a});case"millis":return t.fromMillis(n,{zone:a});case"seconds":case"unix":return t.fromSeconds(n,{zone:a});default:return t.fromFormat(n,u,{zone:a})}}(e,o.input.format,o.input.zone);if(0==r.isValid)throw r.invalidReason;var n=e,u=o.output.format,a=o.output.zone,i=function(t){return t&&"locale"!=t&&"local"!=t?t:null}(o.output.locale?o.output.locale:null);if("never"==r)return null;if(o.parse&&(r=o.parse.call(r)),r=(r="locale"!=a&&"local"!=a?r.setZone(a):r.setZone("local")).setLocale(i),"object"==typeof u)return r.toLocaleString(u);switch(u.toLowerCase()){case"relative":return r.toRelative(o.output.relative);case"sql":return r.toSQL(n);case"iso":return r.toISO(n);case"http":return r.toHTTP(n);case"jsdate":return r.toJSDate(n);case"rfc":case"rfc2822":return r.toRFC2822(n);case"millis":return r.toMillis(n);case"unix":case"seconds":return r.toSeconds(n);default:return r.toFormat(u)}}var a={vueluxon:function(t){return function(o,a,i){if(o&&"object"==typeof o){if(a=o,!o.value)throw"The first parameter should be a string, or the object should contain a `value` property";o=o.value}return"string"==typeof a&&(a={output:{format:a}}),u(o,function(t){if("object"!=typeof t)throw"formatSettings.js: `settings` is not an object";var o=e(r,t.templates);if("string"==typeof t.input){var u=t.input.toLowerCase();o[u]?t.input=o[u]:t.input={format:t.input}}if("string"==typeof t.output){var a=t.output.toLowerCase();o[a]?t.output=o[a]:t.output={format:t.output}}t.relative&&(t.output.relative=t.relative),t.locale&&(t.output.locale=t.locale);var i=function(t){if("object"==typeof t)return t;var e=t.toLowerCase();return o[e]?o[e].format:t},l=function(t){var e=t.toLowerCase();return o[e]?o[e].zone:t};return(t=e(n,t)).input.format=i(t.input.format),t.output.format=i(t.output.format),t.input.zone=l(t.input.zone),t.output.zone=l(t.output.zone),t.output.relative=function(t){if("object"==typeof t)return t;var e=t.toLowerCase();return o[e]?o[e].relative:t}(t.output.relative),t}(e(t,a,i)))}},install:function(t,e){var o=this.vueluxon(e),r=e&&e.methodName?e.methodName:"$luxon";t.prototype[r]=o,t.filter("luxon",(function(){return"string"==typeof arguments[1]?o(arguments[0],arguments[2],{output:{format:arguments[1]}}):o(arguments[0],arguments[1])}));t.filter("luxonRelative",(function(){return o(arguments[0],arguments[2],{output:{format:"relative",relative:arguments[1]}})}))}};export default a;