/**
 * 获取几天前的时间戳
 * @private
 * @param {boolean} n 几天前
 * @returns {number} 时间戳
 */
function getTimeStamp() {
  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  return Date.now() - n * 24 * 60 * 60 * 1000;
}
/**
 * 获取几天前的起始时间戳
 * @param {boolean} n 几天前
 * @returns {number} 时间戳
 * @example
 * ```ts
 * // 默认返回秒级时间戳（今日 0 点 0 分 0 秒）
 * getDayStartTimestamp(0);
 * // 返回毫秒级时间戳
 * getDayStartTimestamp(0, 'ms');
 * // 获取三天前的起始时间戳（秒级）
 * getDayStartTimestamp(3);
 * ```
 */
function getDayStartTimestamp() {
  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 's';
  var time = getTimeStamp(n);
  var date = new Date(time);
  date.setHours(0, 0, 0, 0);
  if (unit === 'ms' || unit === 'MS') {
    return date.getTime();
  }
  var startTime = parseInt("".concat(date.getTime() / 1000), 10);
  return startTime;
}
/**
 * 获取几天前的终止时间戳
 * @param {boolean} n 几天前
 * @param {string} unit 返回时间戳的单位，默认是s(秒)
 * @param {string} endFlag 以什么单位作为结束时间，默认分钟，即 23时59劆0秒0毫秒
 * @returns {number} 时间戳
 * @example
 * ```ts
 * // 默认返回今日 23:59:00 的秒级时间戳
 * getDayEndTimeStamp(0);
 * // 返回毫秒级
 * getDayEndTimeStamp(0, 'ms');
 * // 以秒为结束单位，返回 23:59:59 毫秒级
 * getDayEndTimeStamp(0, 'MS', 's');
 * // 以毫秒为结束单位，返回 23:59:59.999
 * getDayEndTimeStamp(0, 'MS', 'ms');
 * // 以小时为结束单位，返回 23:00:00
 * getDayEndTimeStamp(0, 'MS', 'h');
 * ```
 */
function getDayEndTimeStamp() {
  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 's';
  var endFlag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'm';
  var time = getTimeStamp(n);
  var date = new Date(time);
  if (['h', 'hh', 'H'].indexOf(endFlag) > -1) {
    date.setHours(23, 0, 0, 0);
  } else if (['m', 'mm', 'M'].indexOf(endFlag) > -1) {
    date.setHours(23, 59, 0, 0);
  } else if (['s', 'ss', 'S'].indexOf(endFlag) > -1) {
    date.setHours(23, 59, 59, 0);
  } else if (['ms', 'MS'].indexOf(endFlag) > -1) {
    date.setHours(23, 59, 59, 999);
  }
  if (unit === 'ms' || unit === 'MS') {
    return date.getTime();
  }
  var endTime = parseInt("".concat(date.getTime() / 1000), 10);
  return endTime;
}
function getTodayStartTimestamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  return getDayStartTimestamp(0, unit);
}
function getTodayEndTimeStamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  var endFlag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'm';
  return getDayEndTimeStamp(0, unit, endFlag);
}
function getYesterdayStartTimeStamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  return getDayStartTimestamp(1, unit);
}
function getYesterdayEndTimeStamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  var endFlag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'm';
  return getDayEndTimeStamp(1, unit, endFlag);
}
function getDBYStartTimeStamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  return getDayStartTimestamp(2, unit);
}
function getDBYEndTimeStamp() {
  var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 's';
  var endFlag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'm';
  return getDayEndTimeStamp(2, unit, endFlag);
}
/**
 * 查询距今有多少天
 * @param date 时间
 * @returns 距今多少天
 * @ignore
 */
function getDaysFromToday(date) {
  var zero = new Date(date);
  zero.setHours(0, 0, 0, 0);
  var now = new Date();
  now.setHours(0, 0, 0);
  var days = (now.getTime() - zero.getTime()) / (1 * 24 * 60 * 60 * 1000);
  return parseInt("".concat(days), 10);
}
function getSomeDayStartTimeStamp(date) {
  var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 's';
  var days = getDaysFromToday(date);
  return getDayStartTimestamp(days, unit);
}
function getSomeDayEndTimeStamp(date) {
  var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 's';
  var days = getDaysFromToday(date);
  return getDayEndTimeStamp(days, unit);
}

export { getDBYEndTimeStamp, getDBYStartTimeStamp, getDayEndTimeStamp, getDayStartTimestamp, getSomeDayEndTimeStamp, getSomeDayStartTimeStamp, getTodayEndTimeStamp, getTodayStartTimestamp, getYesterdayEndTimeStamp, getYesterdayStartTimeStamp };
