Manipulasi tanggal dasar dalam skrip Google

11

Saya ingin mendefinisikan fungsi khusus di Google Sheet. Fungsi ini harus melakukan sesuatu yang sangat sederhana, namun saya belum berhasil menemukan cara melakukannya. Saya sangat bingung dengan semua jawaban yang saya baca karena saya tidak dapat menemukan referensi yang jelas tentang berurusan dengan tanggal dalam skrip google.

Dari apa yang saya mengerti, manipulasi tanggal dasar dapat dilakukan dengan:

  • new Date(): dari apa yang saya mengerti, itu mendefinisikan objek yang memiliki beberapa properti. Saya tidak tahu cara menggunakan tanggal sel dan mengubahnya sebagai objek.
  • Utilities.formatDate(): ini untuk mengubah format tanggal yang dilihat sebagai string .
  • perpustakaan Moment( http://momentjs.com/ )

Pada akhirnya, bagaimana saya bisa memasukkan dua tanggal (misalnya 31/01/2016) dan, katakanlah, menemukan maksimum antara keduanya dan mengekstrak bulan yang pertama?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

Saya juga tertarik jika seseorang dapat menjelaskan garis besar berurusan dengan kencan, atau menunjukkan referensi yang baik.

dan dipahami
sumber
Terima kasih. Apakah tidak ada jalan lain? Tampaknya sangat rumit untuk mengekstrak, misalnya, bulan kencan! Plus itu harus memperhitungkan zona waktu ... Itu agak bengkok untuk operasi tanggal sederhana (tetap).
anderstood
Saya menambahkan jawaban yang berfokus pada kode kasus yang terungkap, tetapi pertanyaannya adalah dua luas (manipulasi tanggal). Mungkin Anda harus mulai dengan mencari cuplikan kode JavaScript dan kursus online.
Rubén
@ Rubén saya mengerti. Saya tidak ingin mengajukan pertanyaan "tulis kode untuk saya", jadi saya mencari informasi umum yang tidak saya temukan. Posting Sergei insas yang Anda tunjukkan sangat membantu.
anderstood
Mengenai informasi umum tentang JavaScript, lihat developer.mozilla.org/en-US/docs/Web/JavaScript dan mengenai Google Apps Script, lihat developers.google.com/apps-script .
Rubén

Jawaban:

14

Mendapatkan dan menetapkan nilai datetime

Setiap kali skrip Anda memanggil .getValue()sel yang diformat sebagai tanggal, tanggal-waktu, atau durasi, skrip mendapat objek Tanggal JavaScript . Anda kemudian dapat menerapkan berbagai metode yang tercantum pada halaman MDN ke objek ini, termasuk getMonth()untuk bulan itu. Contoh:

  var sheet = SpreadsheetApp.getActiveSheet();
  var value = sheet.getRange('A1').getValue();  // is a Date object
  Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); 
  // examples of available methods

Sebaliknya, Anda dapat menetapkan objek Tanggal ke sel menggunakan setValue, dan itu akan secara otomatis diformat seperti itu.

  sheet.getRange('B2').setValue(new Date());  // current timestamp

Zona waktu

Stempel waktu di Google Sheets berada di zona waktu lokal, yang ditetapkan melalui File> pengaturan Spreadsheet. Skrip juga beroperasi dalam zona waktu, yang mungkin berbeda dan ditemukan di bawah File> Properti proyek di editor skrip. Jika zona waktu ini tidak setuju, Anda akan memiliki masalah dengan cap waktu.

Untuk memeriksa apakah zona waktu setuju, Anda dapat membandingkan keduanya secara manual, atau melakukan sesuatu seperti ini:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

Ini memasukkan rumus =date(2015,1,1)dalam sel A1. Hasilnya adalah 2015-01-01 00:00:00 di zona waktu spreadsheet. Script kemudian mendapatkan tanggal dan mengekstrak jam di waktu lokal skrip. Jika zona waktu setuju, Anda akan melihat 0,0 di log.


sumber
4

Jawaban singkat

Di bawah ini dua fungsi khusus disajikan sebagai contoh bagaimana Google Sheets dan Google Apps Script dapat bekerja dengan tanggal.

Contoh 1: Dapatkan tanggal terbaru

dapatkan tanggal terbaru

function myFunction(date1,date2) {
  return new Date(Math.max(date1,date2)) 
}

Contoh 2: Dapatkan bulan dari tanggal terbaru

function myFunction2(date1,date2) {
  var date = new Date(Math.max(date1,date2));
  return date.getMonth();
}

Penjelasan singkat

Dalam contoh pertama metode JavaScript Math.max melakukan pekerjaan.

Jika ingin mendapatkan tanggal sebagai hasil, objek tanggal dibuat dengan menggunakan Date () baru .

Dalam contoh kedua, objek tanggal ditugaskan ke variabel, maka metode JavaScript getMonth () digunakan untuk mendapatkan indeks bulan. Ingatlah bahwa penggunaan JavaScript 0untuk elemen awal begitu 0juga untuk Januari, 1untuk Februari dan seterusnya.

Referensi

Rubén
sumber
i) Apakah date1, date2disahkan sebagai angka (biasanya: 54243)? ii) Saya sekarang mencoba untuk mengekstrak bulan date2penggunaan date2.getMonth()tetapi ketika sel 01/12/2015itu mengembalikan 10 dan 11 untuk 02/12/2015. Saya kira itu karena zona waktu. Fungsi lembar month()jauh lebih sederhana.
anderstood
Google Sheets menangani tanggal sebagai nomor seri sama dengan JavaScript tetapi masing-masing memiliki tanggal mulai yang berbeda. Jadi, jika Anda ingin menggunakan fungsi tanggal JavaScript, pertama-tama harus mengkonversi tanggal spreadsheet ke tanggal JavaScript. Seperti yang sudah Anda perhatikan, jalur yang lebih mudah adalah menggunakan fungsi spreadsheet untuk menangani tanggal spreadsheet dan fungsi JavaScript untuk menangani tanggal JavaScript.
Rubén
@ anderstood: Saya menambahkan contoh kedua.
Rubén
Terima kasih lagi. Mengenai contoh kedua, seperti yang telah saya tulis, ketika maks adalah 01/12/2015 myfunction2mengembalikan 10 dan ketika maks adalah 02/12/2015, ia mengembalikan 11. Sementara saya OK dengan 11, saya tidak mengerti mengapa pengembalian 10 untuk 01/12/2015. Seperti yang saya katakan, saya percaya ini karena GMT tetapi saya tidak yakin. Apakah saya melewatkan sesuatu?
anderstood
@anderstood: buat spredsheet demo bagikan dengan siapa saja dengan tautan hanya untuk dilihat dan poskan pertanyaan baru termasuk tautan ke spreadsheet demo.
Rubén