import dateFormat from 'dateformat' import { PickerValue } from '../../CCWheelPicker/utils' import { FormatTypes } from './helpers' export type PickerValueForDate = Omit & { value: string } const date = new Date() const year = date.getFullYear() /** * 各スロットのフォーマット * mode日時の時だけ */ export const dateFormats: FormatTypes[] = [ { label: 'yyyy', startOffset: year - 100, upperNumber: year + 100, requiredDigit: false, numberOptions: true, }, // 4桁の数字で年を表示。 { label: 'yy', startOffset: 0, upperNumber: 99, requiredDigit: true, numberOptions: true, }, // 年を最後の2桁で表示;10未満の年には先頭ゼロあり。 { label: 'dd', startOffset: 1, upperNumber: 31, requiredDigit: true, numberOptions: true, }, // 月の日付としての数字;1桁の日には先頭ゼロあり。 { label: 'd', startOffset: 1, upperNumber: 31, requiredDigit: false, numberOptions: true, }, // 月の日付としての数字;1桁の日には先頭のゼロなし。 { label: 'mm', startOffset: 1, upperNumber: 12, requiredDigit: true, numberOptions: true, }, // 月を数字で表示;1桁の月には先頭ゼロあり。 { label: 'm', startOffset: 1, upperNumber: 12, requiredDigit: false, numberOptions: true, }, // 月を数字で表示;1桁の月には先頭のゼロなし。 { label: 'h', startOffset: 0, upperNumber: 11, requiredDigit: false, numberOptions: true, }, // 時間を表示;1桁の時間には12時間制で先頭のゼロなし。 { label: 'hh', startOffset: 0, upperNumber: 11, requiredDigit: true, numberOptions: true, }, // 時間を表示;1桁の時間には12時間制で先頭ゼロあり。 { label: 'HH', startOffset: 0, upperNumber: 23, requiredDigit: true, numberOptions: true, }, // 時間を表示;1桁の時間には24時間制で先頭ゼロあり。 { label: 'H', startOffset: 0, upperNumber: 23, requiredDigit: false, numberOptions: true, }, // 時間を表示;1桁の時間には24時間制で先頭のゼロなし。 { label: 'MM', startOffset: 0, upperNumber: 59, requiredDigit: true, numberOptions: true, }, // 分を数字で表示;1桁の分には先頭ゼロあり。 { label: 'M', startOffset: 0, upperNumber: 59, requiredDigit: false, numberOptions: true, }, // 分を数字で表示;1桁の分には先頭のゼロなし。 { label: 'ss', startOffset: 0, upperNumber: 59, requiredDigit: true, numberOptions: true, }, // 秒を数字で表示;1桁の秒には先頭ゼロあり。 { label: 's', startOffset: 0, upperNumber: 59, requiredDigit: false, numberOptions: true, }, // 秒を数字で表示;1桁の秒には先頭のゼロなし。 ] /** * 文字列を日付に変換する * @param model * @returns */ export function transformValueFromDateText(model, slotsFormat) { const unitDateInJp = ['年', '月', '日'] const timeUnitDateInJp = ['時', '分'] const secondUnitDateInJp = ['秒'] const signs = ['/', ':'] let modelFormated = unitDateInJp .reduce((acc, cur) => { return acc.replaceAll(cur, '/') }, model) .replaceAll('//', '/') modelFormated = timeUnitDateInJp .reduce((acc, cur) => { return acc.replaceAll(cur, ':') }, modelFormated) .replaceAll('::', ':') modelFormated = secondUnitDateInJp.reduce((acc, cur) => { return acc.replaceAll(cur, '') }, modelFormated) // 末尾に余計な記号がある場合は消去 if (signs.includes(modelFormated.slice(-1))) modelFormated = modelFormated.slice(0, -1) const date = new Date(modelFormated || '') return slotsFormat.map((e) => { return { value: dateFormat(date, e.format), label: dateFormat(date, e.format), } }) } /** 閏年の判別をする関数 * @param year 年 * @returns boolean 閏年の場合はtrue */ export function isLeapYear(year: number): boolean { if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) { return true } return false }