time
This commit is contained in:
@@ -1,6 +1,34 @@
|
||||
// VaultSentinel - Account Management Application
|
||||
// Main JavaScript functionality
|
||||
|
||||
const APP_TIME_ZONE = 'Asia/Ho_Chi_Minh';
|
||||
const APP_DATE_FORMATTER = new Intl.DateTimeFormat('vi-VN', {
|
||||
timeZone: APP_TIME_ZONE,
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
});
|
||||
const APP_DATE_TIME_FORMATTER = new Intl.DateTimeFormat('vi-VN', {
|
||||
timeZone: APP_TIME_ZONE,
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hourCycle: 'h23'
|
||||
});
|
||||
const APP_TIME_PARTS_FORMATTER = new Intl.DateTimeFormat('en-CA', {
|
||||
timeZone: APP_TIME_ZONE,
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hourCycle: 'h23'
|
||||
});
|
||||
|
||||
class AccountManager {
|
||||
constructor() {
|
||||
// Check if user is logged in
|
||||
@@ -1795,7 +1823,7 @@ class AccountManager {
|
||||
<div class="bg-surface-container-lowest p-4 rounded-xl border border-outline-variant/15 flex flex-col">
|
||||
<span class="text-[10px] font-bold text-on-surface-variant uppercase tracking-wider mb-2">Last Updated</span>
|
||||
<div class="flex items-baseline justify-between">
|
||||
<span class="text-sm font-black text-on-surface">${new Date().toLocaleDateString()}</span>
|
||||
<span class="text-sm font-black text-on-surface">${APP_DATE_FORMATTER.format(new Date())}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-primary-container/10 p-4 rounded-xl border border-primary/20 flex flex-col">
|
||||
@@ -2055,21 +2083,49 @@ class AccountManager {
|
||||
return { label: 'Đang sử dụng', className: 'bg-blue-100 text-blue-700' };
|
||||
}
|
||||
|
||||
getAppTimeParts(value = new Date()) {
|
||||
const date = value instanceof Date ? value : new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return null;
|
||||
|
||||
return APP_TIME_PARTS_FORMATTER.formatToParts(date).reduce((parts, part) => {
|
||||
if (part.type !== 'literal') {
|
||||
parts[part.type] = part.value;
|
||||
}
|
||||
return parts;
|
||||
}, {});
|
||||
}
|
||||
|
||||
formatTimestampForCode(value = new Date(), includeMilliseconds = false) {
|
||||
const date = value instanceof Date ? value : new Date(value);
|
||||
const parts = this.getAppTimeParts(date);
|
||||
if (!parts) return '';
|
||||
|
||||
const timestamp = [
|
||||
parts.year,
|
||||
parts.month,
|
||||
parts.day,
|
||||
parts.hour,
|
||||
parts.minute,
|
||||
parts.second
|
||||
].join('');
|
||||
|
||||
return includeMilliseconds
|
||||
? `${timestamp}${String(date.getMilliseconds()).padStart(3, '0')}`
|
||||
: timestamp;
|
||||
}
|
||||
|
||||
formatDateOnly(value) {
|
||||
if (!value) return '-';
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return String(value);
|
||||
return date.toLocaleDateString();
|
||||
return APP_DATE_FORMATTER.format(date);
|
||||
}
|
||||
|
||||
toDateInputValue(value) {
|
||||
if (!value) return '';
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return '';
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day}`;
|
||||
const parts = this.getAppTimeParts(value);
|
||||
if (!parts) return '';
|
||||
return `${parts.year}-${parts.month}-${parts.day}`;
|
||||
}
|
||||
|
||||
formatBorrowerDisplay(name, quantity = 1) {
|
||||
@@ -5019,16 +5075,7 @@ class AccountManager {
|
||||
.slice(0, 32);
|
||||
|
||||
const base = toToken(payload.model) || toToken(payload.serialNumber) || toToken(payload.assetName) || 'ASSET';
|
||||
const now = new Date();
|
||||
const timestamp = [
|
||||
String(now.getFullYear()),
|
||||
String(now.getMonth() + 1).padStart(2, '0'),
|
||||
String(now.getDate()).padStart(2, '0'),
|
||||
String(now.getHours()).padStart(2, '0'),
|
||||
String(now.getMinutes()).padStart(2, '0'),
|
||||
String(now.getSeconds()).padStart(2, '0'),
|
||||
String(now.getMilliseconds()).padStart(3, '0')
|
||||
].join('');
|
||||
const timestamp = this.formatTimestampForCode(new Date(), true);
|
||||
const randomSuffix = String(Math.floor(Math.random() * 100)).padStart(2, '0');
|
||||
return `AST-${base}-${timestamp}${randomSuffix}`;
|
||||
}
|
||||
@@ -6481,8 +6528,7 @@ class AccountManager {
|
||||
const workbook = window.XLSX.utils.book_new();
|
||||
window.XLSX.utils.book_append_sheet(workbook, worksheet, 'TaiSan');
|
||||
|
||||
const now = new Date();
|
||||
const timestamp = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, '0')}${String(now.getDate()).padStart(2, '0')}`;
|
||||
const timestamp = this.formatTimestampForCode(new Date()).slice(0, 8);
|
||||
window.XLSX.writeFile(workbook, `danh-sach-tai-san-${timestamp}.xlsx`);
|
||||
this.notifySuccess('Xuất Excel thành công');
|
||||
}
|
||||
@@ -7418,7 +7464,7 @@ class AccountManager {
|
||||
if (Number.isNaN(date.getTime())) {
|
||||
return String(value);
|
||||
}
|
||||
return date.toLocaleString();
|
||||
return APP_DATE_TIME_FORMATTER.format(date);
|
||||
}
|
||||
|
||||
// ========== Users Management ==========
|
||||
|
||||
Reference in New Issue
Block a user