'use strict'; var MONTHS = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; // only set once. var TIMEZONE = ' '; var _hourOffset = parseInt(-(new Date().getTimezoneOffset()) / 60, 10); if (_hourOffset >= 0) { TIMEZONE += '+'; } else { TIMEZONE += '-'; } _hourOffset = Math.abs(_hourOffset); if (_hourOffset < 10) { _hourOffset = '0' + _hourOffset; } TIMEZONE += _hourOffset + '00'; /** * Access log format date. format: `moment().format('DD/MMM/YYYY:HH:mm:ss ZZ')` * * @return {String} */ exports.accessLogDate = function (d) { // 16/Apr/2013:16:40:09 +0800 d = d || new Date(); var date = d.getDate(); if (date < 10) { date = '0' + date; } var hours = d.getHours(); if (hours < 10) { hours = '0' + hours; } var mintues = d.getMinutes(); if (mintues < 10) { mintues = '0' + mintues; } var seconds = d.getSeconds(); if (seconds < 10) { seconds = '0' + seconds; } return date + '/' + MONTHS[d.getMonth()] + '/' + d.getFullYear() + ':' + hours + ':' + mintues + ':' + seconds + TIMEZONE; }; /** * Normal log format date. format: `moment().format('YYYY-MM-DD HH:mm:ss.SSS')` * * @return {String} */ exports.logDate = exports.YYYYMMDDHHmmssSSS = function (d, msSep) { if (typeof d === 'string') { // logDate(msSep) msSep = d; d = new Date(); } else { // logDate(d, msSep) d = d || new Date(); } var date = d.getDate(); if (date < 10) { date = '0' + date; } var month = d.getMonth() + 1; if (month < 10) { month = '0' + month; } var hours = d.getHours(); if (hours < 10) { hours = '0' + hours; } var mintues = d.getMinutes(); if (mintues < 10) { mintues = '0' + mintues; } var seconds = d.getSeconds(); if (seconds < 10) { seconds = '0' + seconds; } var milliseconds = d.getMilliseconds(); if (milliseconds < 10) { milliseconds = '00' + milliseconds; } else if (milliseconds < 100) { milliseconds = '0' + milliseconds; } return d.getFullYear() + '-' + month + '-' + date + ' ' + hours + ':' + mintues + ':' + seconds + (msSep || '.') + milliseconds; }; /** * `moment().format('YYYY-MM-DD HH:mm:ss')` format date string. * * @return {String} */ exports.YYYYMMDDHHmmss = function (d, options) { d = d || new Date(); if (!(d instanceof Date)) { d = new Date(d); } var dateSep = '-'; var timeSep = ':'; if (options) { if (options.dateSep) { dateSep = options.dateSep; } if (options.timeSep) { timeSep = options.timeSep; } } var date = d.getDate(); if (date < 10) { date = '0' + date; } var month = d.getMonth() + 1; if (month < 10) { month = '0' + month; } var hours = d.getHours(); if (hours < 10) { hours = '0' + hours; } var mintues = d.getMinutes(); if (mintues < 10) { mintues = '0' + mintues; } var seconds = d.getSeconds(); if (seconds < 10) { seconds = '0' + seconds; } return d.getFullYear() + dateSep + month + dateSep + date + ' ' + hours + timeSep + mintues + timeSep + seconds; }; /** * `moment().format('YYYY-MM-DD')` format date string. * * @return {String} */ exports.YYYYMMDD = function YYYYMMDD(d, sep) { if (typeof d === 'string') { // YYYYMMDD(sep) sep = d; d = new Date(); } else { // YYYYMMDD(d, sep) d = d || new Date(); if (typeof sep !== 'string') { sep = '-'; } } var date = d.getDate(); if (date < 10) { date = '0' + date; } var month = d.getMonth() + 1; if (month < 10) { month = '0' + month; } return d.getFullYear() + sep + month + sep + date; }; /** * return datetime struct. * * @return {Object} date * - {Number} YYYYMMDD, 20130401 * - {Number} H, 0, 1, 9, 12, 23 */ exports.datestruct = function (now) { now = now || new Date(); return { YYYYMMDD: now.getFullYear() * 10000 + (now.getMonth() + 1) * 100 + now.getDate(), H: now.getHours() }; }; /** * Get Unix's timestamp in seconds. * @return {Number} */ exports.timestamp = function timestamp(t) { if (t) { var v = t; if (typeof v === 'string') { v = Number(v); } if (String(t).length === 10) { v *= 1000; } return new Date(v); } return Math.round(Date.now() / 1000); };