UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

202 lines (201 loc) 7.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SfDate = void 0; /** * */ const formatter_1 = require("./util/formatter"); /** @private **/ function createLiteralBuilder(literal) { return (num) => new SfDate(`${literal}:${String(num)}`); // eslint-disable-line no-use-before-define } /** * A date object to keep Salesforce date literal * * @class * @constructor * @see http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_dateformats.htm */ class SfDate { _literal; /** * */ constructor(literal) { this._literal = literal; } /** * Returns literal when converted to string */ toJSON() { return this._literal; } toString = this.toJSON; /** * Convert JavaScript date object to ISO8601 Date format (e.g. 2012-10-31) * * @param {String|Number|Date} date - Input date * @returns {SfDate} - Salesforce date literal with ISO8601 date format */ static toDateLiteral(date) { let _date; if (typeof date === 'number') { _date = new Date(date); } else if (typeof date === 'string') { _date = SfDate.parseDate(date); } else { _date = date; } const yy = _date.getFullYear(); const mm = _date.getMonth() + 1; const dd = _date.getDate(); const dstr = [yy, (0, formatter_1.zeroPad)(mm), (0, formatter_1.zeroPad)(dd)].join('-'); return new SfDate(dstr); } /** * Convert JavaScript date object to ISO8601 DateTime format * (e.g. 2012-10-31T12:34:56Z) */ static toDateTimeLiteral(date) { let _date; if (typeof date === 'number') { _date = new Date(date); } else if (typeof date === 'string') { _date = SfDate.parseDate(date); } else { _date = date; } const yy = _date.getUTCFullYear(); const mm = _date.getUTCMonth() + 1; const dd = _date.getUTCDate(); const hh = _date.getUTCHours(); const mi = _date.getUTCMinutes(); const ss = _date.getUTCSeconds(); const dtstr = `${[yy, (0, formatter_1.zeroPad)(mm), (0, formatter_1.zeroPad)(dd)].join('-')}T${[ (0, formatter_1.zeroPad)(hh), (0, formatter_1.zeroPad)(mi), (0, formatter_1.zeroPad)(ss), ].join(':')}Z`; return new SfDate(dtstr); } /** * Convert JavaScript date object to ISO8601 time format * (e.g. 12:34:56.789Z) */ static toTimeLiteral(time) { let _date = new Date(0); if (typeof time === 'string') { _date = SfDate.parseTime(time); } else if (typeof time === 'number') { _date = new Date(time); } else { _date = time; } const hh = _date.getUTCHours(); const mi = _date.getUTCMinutes(); const ss = _date.getUTCSeconds(); const sss = _date.getUTCMilliseconds(); const tstr = `${(0, formatter_1.zeroPad)(hh)}:${(0, formatter_1.zeroPad)(mi)}:${(0, formatter_1.zeroPad)(ss)}.${(0, formatter_1.zeroPad)(sss, 3)}Z`; return new SfDate(tstr); } /** * Parse IS08601 date(time) formatted string and return date instance */ static parseDate(str) { let d = new Date(); const regexp = /^([\d]{4})-?([\d]{2})-?([\d]{2})(T([\d]{2}):?([\d]{2}):?([\d]{2})(.([\d]{3}))?(Z|([+-])([\d]{2}):?([\d]{2})))?$/; const m = str.match(regexp); if (m) { d = new Date(0); if (!m[4]) { d.setFullYear(parseInt(m[1], 10)); d.setDate(parseInt(m[3], 10)); d.setMonth(parseInt(m[2], 10) - 1); d.setHours(0); d.setMinutes(0); d.setSeconds(0); d.setMilliseconds(0); } else { d.setUTCFullYear(parseInt(m[1], 10)); d.setUTCDate(parseInt(m[3], 10)); d.setUTCMonth(parseInt(m[2], 10) - 1); d.setUTCHours(parseInt(m[5], 10)); d.setUTCMinutes(parseInt(m[6], 10)); d.setUTCSeconds(parseInt(m[7], 10)); d.setUTCMilliseconds(parseInt(m[9] || '0', 10)); if (m[10] && m[10] !== 'Z') { const offset = parseInt(m[12], 10) * 60 + parseInt(m[13], 10); d.setTime((m[11] === '+' ? -1 : 1) * offset * 60 * 1000 + d.getTime()); } } return d; } throw new Error(`Invalid date format is specified : ${str}`); } /** * Parse IS08601 time formatted string and convert to parse string */ static parseTime(str) { const regexp = /^([\d]{2}):?([\d]{2}):?([\d]{2})(.([\d]{3}))?Z?$/; const m = str.match(regexp); if (m) { const d = new Date(0); const hh = parseInt(m[1], 10); const mi = parseInt(m[2], 10); const ss = parseInt(m[3], 10); const sss = parseInt(m[5] || '0', 10); d.setUTCHours(hh); d.setUTCMinutes(mi); d.setUTCSeconds(ss); d.setUTCMilliseconds(sss); return d; } throw new Error(`Invalid time format is specified : ${str}`); } static YESTERDAY = new SfDate('YESTERDAY'); static TODAY = new SfDate('TODAY'); static TOMORROW = new SfDate('TOMORROW'); static LAST_WEEK = new SfDate('LAST_WEEK'); static THIS_WEEK = new SfDate('THIS_WEEK'); static NEXT_WEEK = new SfDate('NEXT_WEEK'); static LAST_MONTH = new SfDate('LAST_MONTH'); static THIS_MONTH = new SfDate('THIS_MONTH'); static NEXT_MONTH = new SfDate('NEXT_MONTH'); static LAST_90_DAYS = new SfDate('LAST_90_DAYS'); static NEXT_90_DAYS = new SfDate('NEXT_90_DAYS'); static LAST_N_DAYS = createLiteralBuilder('LAST_N_DAYS'); static NEXT_N_DAYS = createLiteralBuilder('NEXT_N_DAYS'); static NEXT_N_WEEKS = createLiteralBuilder('NEXT_N_WEEKS'); static LAST_N_WEEKS = createLiteralBuilder('LAST_N_WEEKS'); static NEXT_N_MONTHS = createLiteralBuilder('NEXT_N_MONTHS'); static LAST_N_MONTHS = createLiteralBuilder('LAST_N_MONTHS'); static THIS_QUARTER = new SfDate('THIS_QUARTER'); static LAST_QUARTER = new SfDate('LAST_QUARTER'); static NEXT_QUARTER = new SfDate('NEXT_QUARTER'); static NEXT_N_QUARTERS = createLiteralBuilder('NEXT_N_QUARTERS'); static LAST_N_QUARTERS = createLiteralBuilder('LAST_N_QUARTERS'); static THIS_YEAR = new SfDate('THIS_YEAR'); static LAST_YEAR = new SfDate('LAST_YEAR'); static NEXT_YEAR = new SfDate('NEXT_YEAR'); static NEXT_N_YEARS = createLiteralBuilder('NEXT_N_YEARS'); static LAST_N_YEARS = createLiteralBuilder('LAST_N_YEARS'); static THIS_FISCAL_QUARTER = new SfDate('THIS_FISCAL_QUARTER'); static LAST_FISCAL_QUARTER = new SfDate('LAST_FISCAL_QUARTER'); static NEXT_FISCAL_QUARTER = new SfDate('NEXT_FISCAL_QUARTER'); static THIS_FISCAL_YEAR = new SfDate('THIS_FISCAL_YEAR'); static NEXT_N_FISCAL_QUARTERS = createLiteralBuilder('NEXT_N_FISCAL_QUARTERS'); static LAST_N_FISCAL_QUARTERS = createLiteralBuilder('LAST_N_FISCAL_QUARTERS'); static LAST_FISCAL_YEAR = new SfDate('LAST_FISCAL_YEAR'); static NEXT_FISCAL_YEAR = new SfDate('NEXT_FISCAL_YEAR'); static NEXT_N_FISCAL_YEARS = createLiteralBuilder('NEXT_N_FISCAL_YEARS'); static LAST_N_FISCAL_YEARS = createLiteralBuilder('LAST_N_FISCAL_YEARS'); } exports.SfDate = SfDate; exports.default = SfDate;