initial: bootstrap from BukidBountyApp base
This commit is contained in:
105
resources/js/utils/date.js
Normal file
105
resources/js/utils/date.js
Normal file
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* Converts a 24-hour time string to 12-hour format.
|
||||
*
|
||||
* @param {string} time24 - Time in HH:mm or HH:mm:ss format
|
||||
* @returns {string} Time in 12-hour format (e.g. "3:45 PM")
|
||||
*
|
||||
* @example
|
||||
* convertTo12HRTime('14:30') // "2:30 PM"
|
||||
*/
|
||||
export function convertTo12HRTime(time24) {
|
||||
if (!time24) return ''
|
||||
|
||||
return new Date(`1970-01-01T${time24}Z`).toLocaleTimeString('en-US', {
|
||||
timeZone: 'UTC',
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
hour12: true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Formats a Date object into "Mon DD, YYYY".
|
||||
*
|
||||
* @param {Date} date
|
||||
* @returns {string}
|
||||
*
|
||||
* @example
|
||||
* formatDate(new Date()) // "Jan 31, 2026"
|
||||
*/
|
||||
export function formatDate(date) {
|
||||
if (!(date instanceof Date)) return ''
|
||||
|
||||
return date.toLocaleDateString('en-US', {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
year: 'numeric'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns today's date in GMT+8 timezone in "YYYY-MM-DD" format.
|
||||
*
|
||||
* @returns {string} - Date string in GMT+8
|
||||
*
|
||||
* @example
|
||||
* getDateInGMT8() // "2026-01-31"
|
||||
*/
|
||||
export function getDateInGMT8() {
|
||||
const now = new Date()
|
||||
const utcTime = now.getTime()
|
||||
const gmt8Offset = 8 * 60 * 60 * 1000
|
||||
const gmt8Time = new Date(utcTime + gmt8Offset)
|
||||
|
||||
return gmt8Time.toISOString().split('T')[0]
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Converts a date-time string into a readable format.
|
||||
*
|
||||
* Supports:
|
||||
* - "YYYY-MM-DD"
|
||||
* - "YYYY-MM-DD HH:mm:ss"
|
||||
* - ISO strings
|
||||
*
|
||||
* @param {string} dateTimeString
|
||||
* @returns {string}
|
||||
*
|
||||
* @example
|
||||
* formatDateTimetoReadable('2026-01-31 14:30')
|
||||
* // "January 31, 2026 2:30PM"
|
||||
*/
|
||||
export function formatDateTimetoReadable(dateTimeString) {
|
||||
if (!dateTimeString) return ''
|
||||
|
||||
const normalized = dateTimeString.includes(' ')
|
||||
? dateTimeString.replace(' ', 'T')
|
||||
: dateTimeString
|
||||
|
||||
const date = new Date(normalized)
|
||||
if (isNaN(date.getTime())) return ''
|
||||
|
||||
const datePart = date.toLocaleDateString('en-US', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
})
|
||||
|
||||
// Only show time if original string had time
|
||||
if (!dateTimeString.includes(' ')) {
|
||||
return datePart
|
||||
}
|
||||
|
||||
let hours = date.getHours()
|
||||
const minutes = date.getMinutes()
|
||||
const ampm = hours >= 12 ? 'PM' : 'AM'
|
||||
|
||||
hours = hours % 12 || 12
|
||||
const paddedMinutes = minutes.toString().padStart(2, '0')
|
||||
|
||||
return `${datePart} ${hours}:${paddedMinutes}${ampm}`
|
||||
}
|
||||
Reference in New Issue
Block a user