unction formatNSDate(fld, datePassed) {
try {
dLog(‘datePassed : ‘ + fld + ‘ =’, datePassed);
var monthMap = {
‘jan’: ’01’, ‘feb’: ’02’, ‘mar’: ’03’, ‘apr’: ’04’,
‘may’: ’05’, ‘jun’: ’06’, ‘jul’: ’07’, ‘aug’: ’08’,
‘sep’: ’09’, ‘oct’: ’10’, ‘nov’: ’11’, ‘dec’: ’12’
};
// Get date format from user preference
var dateFormat;
try {
var field = nlapiGetField(fld);
dateFormat = field ? field.getDateFormat() : null;
} catch (e) {
dLog(‘Field lookup failed, using fallback format’);
}
if (!dateFormat) {
dateFormat = nlapiGetContext().getPreference(‘DATE_FORMAT’) || ‘DD/MM/YYYY’;
}
var separatorMatch = dateFormat.match(/[^a-zA-Z]/);
var separator = separatorMatch ? separatorMatch[0] : ‘/’;
var formatParts = dateFormat.split(separator);
var dayIndex = -1, monthIndex = -1, yearIndex = -1;
for (var i = 0; i < formatParts.length; i++) {
var part = formatParts[i].toUpperCase();
if (part === ‘DD’) {
dayIndex = i;
} else if (part.indexOf(‘M’) !== -1) { // Handles M, MM, MMM, MMMM
monthIndex = i;
} else if (part.indexOf(‘Y’) !== -1) { // Handles YY, YYYY
yearIndex = i;
}
}
if (dayIndex === -1 || monthIndex === -1 || yearIndex === -1) {
throw new Error(‘Invalid date format structure.’);
}
var dateParts = datePassed.split(separator);
var day = dateParts[dayIndex];
var month = dateParts[monthIndex];
var year = dateParts[yearIndex];
// Convert month name (e.g., “MARCH” → “03”)
if (isNaN(month)) {
month = month.toLowerCase().substring(0, 3); // Get first 3 letters
month = monthMap[month] || ’01’; // Default to “01” if unknown
}
// Convert two-digit year (e.g., “25” → “2025”)
if (year.length === 2) {
year = (parseInt(year, 10) < 50 ? ’20’ : ’19’) + year; // YY < 50 → 20YY, else 19YY
}
// Ensure proper zero-padding
day = (‘0’ + day).slice(-2);
month = (‘0’ + month).slice(-2);
// Validate final components
if (!day || !month || !year || year.length !== 4) {
throw new Error(‘Invalid date components: ‘ + datePassed);
}
// Convert to NetSuite Date Object (Safe Parsing)
try {
var nsDate = nlapiStringToDate(datePassed);
if (nsDate) {
return (‘0’ + nsDate.getDate()).slice(-2) + ‘/’ +
(‘0’ + (nsDate.getMonth() + 1)).slice(-2) + ‘/’ +
nsDate.getFullYear();
}
} catch (e) {
dLog(‘nlapiStringToDate() failed, fallback to manual processing.’);
}
// Return formatted date in DD/MM/YYYY
var retDate = day + ‘/’ + month + ‘/’ + year;
dLog(‘Formatted date:’, retDate);
return retDate;
} catch (error) {
dLog(“Format error:”, error.message, “| Attempting fallback parsing”);
// Fallback 1: Try JavaScript Date Object parsing
try {
var parsedDate = new Date(datePassed.replace(/-/g, ‘ ‘));
if (!isNaN(parsedDate)) {
return [
(‘0’ + parsedDate.getDate()).slice(-2),
(‘0’ + (parsedDate.getMonth() + 1)).slice(-2),
parsedDate.getFullYear()
].join(‘/’);
}
} catch (e) {}
// Fallback 2: Manual month name replacement
try {
var monthMatch = datePassed.match(/(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i);
if (monthMatch) {
var formatted = datePassed
.replace(monthMatch[0], monthMap[monthMatch[0].toLowerCase().substring(0, 3)])
.replace(/-/g, ‘/’);
return formatNSDate(fld, formatted); // Recursive retry
}
} catch (e) {}
dLog(“All parsing methods failed, returning original”);
return datePassed;
}
}