72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
export function formatDate(dateString: string): string {
|
|
const date = new Date(dateString)
|
|
const months = [
|
|
'ianuarie',
|
|
'februarie',
|
|
'martie',
|
|
'aprilie',
|
|
'mai',
|
|
'iunie',
|
|
'iulie',
|
|
'august',
|
|
'septembrie',
|
|
'octombrie',
|
|
'noiembrie',
|
|
'decembrie',
|
|
]
|
|
|
|
return `${date.getDate()} ${months[date.getMonth()]} ${date.getFullYear()}`
|
|
}
|
|
|
|
export function formatRelativeDate(dateString: string): string {
|
|
const date = new Date(dateString)
|
|
const now = new Date()
|
|
const diffTime = Math.abs(now.getTime() - date.getTime())
|
|
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
|
|
|
|
if (diffDays === 0) return 'astăzi'
|
|
if (diffDays === 1) return 'ieri'
|
|
if (diffDays < 7) return `acum ${diffDays} zile`
|
|
if (diffDays < 30) return `acum ${Math.floor(diffDays / 7)} săptămâni`
|
|
if (diffDays < 365) return `acum ${Math.floor(diffDays / 30)} luni`
|
|
return `acum ${Math.floor(diffDays / 365)} ani`
|
|
}
|
|
|
|
export function generateExcerpt(content: string, maxLength = 160): string {
|
|
const text = content
|
|
.replace(/^---[\s\S]*?---/, '')
|
|
.replace(/!\[.*?\]\(.*?\)/g, '')
|
|
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
.replace(/[#*`]/g, '')
|
|
.trim()
|
|
|
|
if (text.length <= maxLength) return text
|
|
|
|
const truncated = text.slice(0, maxLength)
|
|
const lastSpace = truncated.lastIndexOf(' ')
|
|
return truncated.slice(0, lastSpace) + '...'
|
|
}
|
|
|
|
export function generateSlug(title: string): string {
|
|
const romanianMap: Record<string, string> = {
|
|
ă: 'a',
|
|
â: 'a',
|
|
î: 'i',
|
|
ș: 's',
|
|
ț: 't',
|
|
Ă: 'a',
|
|
Â: 'a',
|
|
Î: 'i',
|
|
Ș: 's',
|
|
Ț: 't',
|
|
}
|
|
|
|
return title
|
|
.split('')
|
|
.map(char => romanianMap[char] || char)
|
|
.join('')
|
|
.toLowerCase()
|
|
.replace(/[^a-z0-9]+/g, '-')
|
|
.replace(/^-+|-+$/g, '')
|
|
}
|