Search code examples
javascriptadobe-indesign

Indesign Javascript to convert dates


I am looking for an Adobe Indesign script to convert date formats.

Example 25/12/2022 to 25 December 2022

I found script which does exactly this but it is using the American date format mm/DD/yyyy and I need it use the UK date format dd/MM/yyyy

The original script came from this Adobe Community forum and was created by Oleh.melnyk

https://community.adobe.com/t5/indesign-discussions/find-and-replace-date-format-indesign-cs6/m-p/13347884#M502699

Looking for someone to help update/convert the script to the UK Date format dd/MM/yyyy

//DESCRIPTION: Convert date format - finds 09/05/1936 and replac eit with 05 September 1936
#target indesign;

/*
    by Oleh Melnyk at 5 April 2017
    requested at https://forums.adobe.com/message/9436296#9436296
*/

//> START OF doUndoWraper
if (parseFloat(app.version) < 6) // "app.version < 6" if it's running under an earlier version than CS4, as earlier versions don't support "Undo" in scripts
    doUndoWrapper();
else
    app.doScript(doUndoWrapper, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Change Date Format");
//< END OF doUndoWraper

function doUndoWrapper(){
    function toUnique(a, b, c) { //array,placeholder,placeholder
        b = a.length;
        while (c = --b)
            while (c--) a[b] !== a[c] || a.splice(c, 1);
        return a // not needed ;)
    }
    
   function convertDateFormat(date){
        var objDate = new Date(date);
        var monthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
        return  ("0" + objDate.getDate()).slice(-2) + " " + monthName[objDate.getMonth()] + " " + objDate.getFullYear();
    }

    app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.nothing; // clear settings

    app.findChangeGrepOptions.includeLockedLayersForFind = false; // search in Locked Layers
    app.findChangeGrepOptions.includeLockedStoriesForFind = false; // search in Locked Stories
    app.findChangeGrepOptions.includeHiddenLayers = false; // search in HiddenLayers
    app.findChangeGrepOptions.includeMasterPages = false; // search in Master Pages
    app.findChangeGrepOptions.includeFootnotes = true; // search in Footnotes

    app.findGrepPreferences.findWhat = "\\d{2}\/\\d{2}\/\\d{4}";

    var whereToSearch = app.activeDocument; // default - search in entire document
    var foundPrep = whereToSearch.findGrep();
    
    var foundElements = [];
    for(var x = 0; x < foundPrep.length; x++){
         foundElements.push(foundPrep[x].contents); 
    }

    var foundUnique = toUnique(foundElements);

    for(var i = 0; i < foundUnique.length; i++){                
        var option = foundUnique[i];                
        app.findGrepPreferences.findWhat = option;           
        app.changeGrepPreferences.changeTo = convertDateFormat(option);        
        whereToSearch.changeGrep();        
        app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.nothing; // clear find what and change to field        
    } 
}

I have installed this script and used it but need it converted to use the UK Date format dd/MM/yyyy

Any help appreciated.


Solution

  • The updated script for dd/mm/yyyy or d/m/yyyy can be found on

    https://community.adobe.com/t5/indesign-discussions/find-and-replace-date-format-indesign-cs6/td-p/13200572

    and below.

    //DESCRIPTION: Convert date format - finds 09/05/1936 and replace it with 09 May 1936
    #target indesign;
    
    /*
        by Oleh Melnyk at 5 April 2017
        requested at https://forums.adobe.com/message/9436296#9436296
        
        Edited By :- Manan Joshi
        Edited the date format to dd/mm/yyyy or d/m/yyyy
    */
    
    //> START OF doUndoWraper
    if (parseFloat(app.version) < 6) // "app.version < 6" if it's running under an earlier version than CS4, as earlier versions don't support "Undo" in scripts
        doUndoWrapper();
    else
        app.doScript(doUndoWrapper, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Change Date Format");
    //< END OF doUndoWraper
    
    function doUndoWrapper(){
        function toUnique(a, b, c) { //array,placeholder,placeholder
            b = a.length;
            while (c = --b)
                while (c--) a[b] !== a[c] || a.splice(c, 1);
            return a // not needed ;)
        }
        
       function convertDateFormat(date){
        var t = date.split("/")
        date = t[1] + "/" + t[0] + "/" + t[2]
            var objDate = new Date(date);
            var monthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
            return  ("0" + objDate.getDate()).slice(-2) + " " + monthName[objDate.getMonth()] + " " + objDate.getFullYear();
        }
    
        app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.nothing; // clear settings
    
        app.findChangeGrepOptions.includeLockedLayersForFind = false; // search in Locked Layers
        app.findChangeGrepOptions.includeLockedStoriesForFind = false; // search in Locked Stories
        app.findChangeGrepOptions.includeHiddenLayers = false; // search in HiddenLayers
        app.findChangeGrepOptions.includeMasterPages = false; // search in Master Pages
        app.findChangeGrepOptions.includeFootnotes = true; // search in Footnotes
    
        app.findGrepPreferences.findWhat = "\\d{1,2}\/\\d{1,2}\/\\d{4}";
    
        var whereToSearch = app.activeDocument; // default - search in entire document
        var foundPrep = whereToSearch.findGrep();
        
        var foundElements = [];
        for(var x = 0; x < foundPrep.length; x++){
             foundElements.push(foundPrep[x].contents); 
        }
    
        var foundUnique = toUnique(foundElements);
    
        for(var i = 0; i < foundUnique.length; i++){                
            var option = foundUnique[i];                
            app.findGrepPreferences.findWhat = option;           
            app.changeGrepPreferences.changeTo = convertDateFormat(option);        
            whereToSearch.changeGrep();        
            app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.nothing; // clear find what and change to field        
        } 
    }