Function to format date (instead of using format or moment.js) Suitescript 1.0

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;

   }

}

Leave a comment

Your email address will not be published. Required fields are marked *