Perbaikan Tanggal pada Google Sheets Akibat Beda Format Lokalisasi Indonesia

Dalam Google Sheet, permasalahan yang sering penulis temui adalah terkait tanggal. Terutama ketika mengganti setting lokasi dan perhitungan dari United State ke format Indonesia.

Belum lagi terkait timezone, seringkali penulis mengalami kesalahan perhitungan.

Gambar di bawah ini adalah contoh kesalahan identifikasi tanggal, yang hari dianggap sebagai bulan, dan bulan sebagai hari. Sehingga yang berhasil di deteksi (meskipun sebenarnya salah) mengalami rataan kanan, sedangkan yang gagal di deteksi tetap rataan kiri.



Oleh karena itu, untuk mudahnya, berikut ini adalah contoh kode Apps Script untuk mengubah letak tanggal menjadi bulan dan sebaliknya:
function isValidDate(d) {
  if ( Object.prototype.toString.call(d) !== "[object Date]" )
    return false;
  return !isNaN(d.getTime());
}

function convertDate(sDate) {
  if (isValidDate(sDate)) {
    var timeZone = Session.getScriptTimeZone();
    var month = sDate.getDate();
    var day = sDate.getMonth() + 1;
    var year = sDate.getFullYear();
    var hh=sDate.getHours();
    var mm=sDate.getMinutes();
    var ss=sDate.getSeconds();
 
    if(hh==0)sDate = Utilities.formatDate(new Date(year,month-1,day,hh,mm,ss), timeZone, "dd/MM/yyyy");
    else sDate = Utilities.formatDate(new Date(year,month-1,day,hh,mm,ss), timeZone, "dd/MM/yyyy HH:mm:ss");
  }else{
    var timeZone = Session.getScriptTimeZone();
    var tm=sDate.split(" ");
    var nn=tm[0].split("/");
    var year=parseInt(nn[2]);
    var month=parseInt(nn[1]);
    var day=parseInt(nn[0]);
    if(tm.length==1){
      sDate = Utilities.formatDate(new Date(year,month-1,day), timeZone, "dd/MM/yyyy");
    }else{
      nn=tm[1].split(":");
      var hh=nn[0];
      var mm=nn[1];
      var ss=nn[2];
      sDate = Utilities.formatDate(new Date(year,month-1,day,hh,mm,ss), timeZone, "dd/MM/yyyy HH:mm:ss");
    }    
  }
  return sDate;
}

function indonesianDate()
{
  var target = SpreadsheetApp.openById("iddatagooglesheet");
  var ss=target.getSheetByName("Peserta Tugas Akhir Semester Ganjil TA 2022-2023");
  var data=ss.getRange("A2:BO").getValues().map(function(row,index){
    if(row[0]!=""){
      if(row[51]!="")row[51]=convertDate(row[51]);
      if(row[52]!="")row[52]=convertDate(row[52]);
      if(row[53]!="")row[53]=convertDate(row[53]);
    }
    return (row[0]!="")?row:null}).filter(function(cellData){return cellData != null;});

  ss.getRange(2,1,data.length,data[0].length).setValues(data);
}

Dimana data di atas, penulis simpan di Google Sheets dengan nama sheet "Peserta Tugas Akhir Semester Ganjil TA 2022-2023", yang setelah kode di atas dijalankan, konversi tanggal menjadi seperti tampak pada gambar di bawah ini:


Penggunaan fungsi timezone, dikarenakan data tanggal yang disimpan di Google Sheets memang sesuai waktu lokal Indonesia sebelumnya.

Komentar



Postingan populer dari blog ini

Apps Script untuk Cetak Sertifikat

Kumpulan Source Code Greenfoot

Menyembunyikan Failed Load Images di Blogger

Kode Greenfoot Game Flappy Bird

Algorithma Coretan Abstrak dengan HTML5 Canvas

Kebodohan Karyawan Menyalahkan Sistem

Algorithma Bilangan Prima dengan Javascript

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Mencoba Submit Theme di Wordpress.org

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script