#1 : 09/06-21 05:49 Nina
Posts: 4
|
Hello,
I read David Lees reply to the post at https://www.advancedrenamer.com/forum_thread?for um_id=11037, and I've been trying for hours to adjust the syntax to my filename: I would like to turn PXL_20210605_105152883.dng into 2021.06.05, 12.51.52,883.dng The original script was: match = item.name.match(/^(.*_)(\d{4}-\d{2}-\d{2})_(\d{2})-(\d{2})-(\d{2})$/); epoch = Date.parse(match[2] + 'T' + match[3] + ':' + match[4] + ':' + match[5]); date = new Date(epoch + 7 * 3600000); return match[1] + date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2) + "_" + ("0" + date.getHours()).slice(-2) + "-" + ("0" + date.getMinutes()).slice(-2) + "-" + ("0" + date.getSeconds()).slice(-2); I either get an error in the Error-Column, or an Error Window "Access violation at address 68C5F7B5 in module js32.dll." Could anyone point me to a resource that teaches how to change the syntax. Thank you so much Nina |
#2 : 09/06-21 05:59 Nina
Posts: 4
|
Uh,
I forgot... Some files are called a little bit different: PXL_20210605_153935016.mp4 PXL_20210604_234852214.NIGHT.dng PXL_20210605_105211801.jpg I hope, that's not an issue? I wish there was a way to just tell the script to use position and length, like with the "<Substr:5:4>"-Tag! Thanks again Nina |
#3 : 09/06-21 07:15 Nina
Posts: 4
|
I am now learning about regex :D
I'm at: match = item.name.match(/^(.*_)(\d{4}\d{2}\d{2})_(\d{2}\d{2}\d{2}).*$/); epoch = Date.parse(match[2] + 'T' + match[3] + ':' + match[4] + ':' + match[5]); date = new Date(epoch + 2 * 3600000); return match[1] + date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2) + "_" + ("0" + date.getHours()).slice(-2) + "-" + ("0" + date.getMinutes()).slice(-2) + "-" + ("0" + date.getSeconds()).slice(-2); for the filenames: PXL_20210605_105152883.dng PXL_20210605_153935016.mp4 PXL_20210604_234852214.NIGHT.dng PXL_20210605_105211801.jpg It still doesn't work : ( Nina |
#4 : 09/06-21 09:42 David Lee
Posts: 1125
|
Reply to #3:
You're getting closer! However you have made several errors. Firstly your regex is only capturing three groups - so it returns: match[1] = "PXL_" match[2] = "20210605" match[3] = "105152" This means that the program is trying to parse the date string: "20210605T105152:undefined:undefined" An ISO date should have the format: "2021-06-05T10:51:52" so you need to match yyyy, mm, dd, hh, mm & ss separately. Initially you indicated that you do not want to retain the prefix ("PXL_") so you don't need to capture the first match. However you do need to match and capture the milliseconds at the end of the string. So use the regex: /^.*_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})(\d{3})/ The date.get methods will return results in your local timezone. This will include daylight saving, where applicable. Since the epoch has been calculated assuming UTC you should replace these methods with the date.getUTC equivalents to avoid errors due to summer time. Finally, add the milliseconds that we captured as match[7] (ie decimal seconds). The following script should work for you... match = item.name.match(/^.*_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})(\d{3})/); epoch = Date.parse(match[1] + '-' + match[2]+ '-' + match[3] + 'T' + match[4] + ':' + match[5] + ':' + match[6]); date = new Date(epoch + 2 * 3600000); return date.getUTCFullYear() + "." + ("0" + (date.getUTCMonth() + 1)).slice(-2) + "." + ("0" + date.getUTCDate()).slice(-2) + "_" + ("0" + date.getUTCHours()).slice(-2) + "." + ("0" + date.getUTCMinutes()).slice(-2) + "." + ("0" + date.getUTCSeconds()).slice(-2) + "," + match[7]; |
#5 : 22/06-21 09:05 Nina
Posts: 4
|
Reply to #4:
WOW, you're a Rockstar! Thank you so much. I even changed it a bit, maybe others can take advantage of this as well: --- match = item.name.match(/^.*_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})(\d{3})/); epoch = Date.parse(match[1] + '-' + match[2]+ '-' + match[3] + 'T' + match[4] + ':' + match[5] + ':' + match[6]); date = new Date(epoch + 2 * 3600000); return date.getUTCFullYear() + "." + ("0" + (date.getUTCMonth() + 1)).slice(-2) + "." + ("0" + date.getUTCDate()).slice(-2) + ", " + ("0" + date.getUTCHours()).slice(-2) + "." + ("0" + date.getUTCMinutes()).slice(-2) + "." + ("0" + date.getUTCSeconds()).slice(-2) + "," + match[7] + " (" + item.imgCameraModel + ", " + item.name + ")"; --- It took me forever though :D . These things are very difficult when you have no idea what you're doing... Thanks again David! Nina |