2026-07-05 06:41:32 +00:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = formatISO9075 ;
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
var _index = _interopRequireDefault ( require ( "../toDate/index.js" ) ) ;
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
var _index2 = _interopRequireDefault ( require ( "../isValid/index.js" ) ) ;
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
var _index3 = _interopRequireDefault ( require ( "../_lib/addLeadingZeros/index.js" ) ) ;
2026-07-07 07:11:50 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2026-07-05 06:41:32 +00:00
/**
* @name formatISO9075
* @category Common Helpers
* @summary Format the date according to the ISO 9075 standard (https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_get-format).
*
* @description
* Return the formatted date string in ISO 9075 format. Options may be passed to control the parts and notations of the date.
*
* @param {Date|Number} date - the original date
* @param {Object} [options] - an object with options.
* @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.
* @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time, or both.
* @returns {String} the formatted date string
* @throws {TypeError} 1 argument required
* @throws {RangeError} `date` must not be Invalid Date
* @throws {RangeError} `options.format` must be 'extended' or 'basic'
2026-07-07 07:11:50 +00:00
* @throws {RangeError} `options.represenation` must be 'date', 'time' or 'complete'
2026-07-05 06:41:32 +00:00
*
* @example
* // Represent 18 September 2019 in ISO 9075 format:
* const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52))
* //=> '2019-09-18 19:00:52'
*
* @example
* // Represent 18 September 2019 in ISO 9075, short format:
* const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })
* //=> '20190918 190052'
*
* @example
* // Represent 18 September 2019 in ISO 9075 format, date only:
* const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })
* //=> '2019-09-18'
*
* @example
* // Represent 18 September 2019 in ISO 9075 format, time only:
* const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })
* //=> '19:00:52'
*/
2026-07-07 07:11:50 +00:00
function formatISO9075 ( dirtyDate , dirtyOptions ) {
2026-07-05 06:41:32 +00:00
if ( arguments . length < 1 ) {
throw new TypeError ( "1 argument required, but only " . concat ( arguments . length , " present" ) ) ;
}
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
var originalDate = ( 0 , _index . default ) ( dirtyDate ) ;
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
if ( ! ( 0 , _index2 . default ) ( originalDate ) ) {
throw new RangeError ( 'Invalid time value' ) ;
}
2026-07-07 07:11:50 +00:00
var options = dirtyOptions || { } ;
var format = options . format == null ? 'extended' : String ( options . format ) ;
var representation = options . representation == null ? 'complete' : String ( options . representation ) ;
2026-07-05 06:41:32 +00:00
if ( format !== 'extended' && format !== 'basic' ) {
throw new RangeError ( "format must be 'extended' or 'basic'" ) ;
}
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
if ( representation !== 'date' && representation !== 'time' && representation !== 'complete' ) {
throw new RangeError ( "representation must be 'date', 'time', or 'complete'" ) ;
}
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
var result = '' ;
var dateDelimiter = format === 'extended' ? '-' : '' ;
2026-07-07 07:11:50 +00:00
var timeDelimiter = format === 'extended' ? ':' : '' ; // Representation is either 'date' or 'complete'
2026-07-05 06:41:32 +00:00
if ( representation !== 'time' ) {
var day = ( 0 , _index3 . default ) ( originalDate . getDate ( ) , 2 ) ;
var month = ( 0 , _index3 . default ) ( originalDate . getMonth ( ) + 1 , 2 ) ;
2026-07-07 07:11:50 +00:00
var year = ( 0 , _index3 . default ) ( originalDate . getFullYear ( ) , 4 ) ; // yyyyMMdd or yyyy-MM-dd.
2026-07-05 06:41:32 +00:00
result = "" . concat ( year ) . concat ( dateDelimiter ) . concat ( month ) . concat ( dateDelimiter ) . concat ( day ) ;
2026-07-07 07:11:50 +00:00
} // Representation is either 'time' or 'complete'
2026-07-05 06:41:32 +00:00
if ( representation !== 'date' ) {
var hour = ( 0 , _index3 . default ) ( originalDate . getHours ( ) , 2 ) ;
var minute = ( 0 , _index3 . default ) ( originalDate . getMinutes ( ) , 2 ) ;
2026-07-07 07:11:50 +00:00
var second = ( 0 , _index3 . default ) ( originalDate . getSeconds ( ) , 2 ) ; // If there's also date, separate it with time with a space
2026-07-05 06:41:32 +00:00
2026-07-07 07:11:50 +00:00
var separator = result === '' ? '' : ' ' ; // HHmmss or HH:mm:ss.
2026-07-05 06:41:32 +00:00
result = "" . concat ( result ) . concat ( separator ) . concat ( hour ) . concat ( timeDelimiter ) . concat ( minute ) . concat ( timeDelimiter ) . concat ( second ) ;
}
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
return result ;
}
2026-07-07 07:11:50 +00:00
2026-07-05 06:41:32 +00:00
module . exports = exports . default ;