Thao tác ngày cơ bản trong tập lệnh Google


10

Tôi muốn xác định một chức năng tùy chỉnh trong Google Sheet. Chức năng này sẽ làm một cái gì đó rất đơn giản, nhưng tôi đã không quản lý để tìm cách làm nó. Tôi rất bối rối với tất cả các câu trả lời tôi đã đọc bởi vì tôi không thể tìm thấy một tài liệu tham khảo rõ ràng về việc xử lý ngày trong các tập lệnh google.

Từ những gì tôi hiểu, các thao tác ngày cơ bản có thể được thực hiện với:

  • new Date(): từ những gì tôi hiểu, nó định nghĩa một đối tượng có một số thuộc tính. Tôi không biết làm thế nào để sử dụng ngày của một tế bào và chuyển đổi nó như một đối tượng như vậy.
  • Utilities.formatDate(): đây là để thay đổi định dạng của ngày được xem dưới dạng chuỗi .
  • thư viện Moment( http://momentjs.com/ )

Cuối cùng, làm thế nào tôi có thể nhập hai ngày (ví dụ 31/01/2016) và, giả sử, tìm tối đa giữa hai ngày và trích xuất tháng của ngày đầu tiên?

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

Tôi cũng quan tâm nếu ai đó có thể giải thích các phác thảo về việc xử lý ngày tháng, hoặc chỉ ra một tài liệu tham khảo tốt.



Cảm ơn bạn. Có không có cách nào khác? Nó có vẻ cực kỳ phức tạp để trích xuất, ví dụ, tháng của một ngày! Thêm vào đó, nó phải tính đến múi giờ ... Đó là một chút xoắn cho các hoạt động ngày đơn giản (cố định).
hiểu

Tôi đã thêm một câu trả lời tập trung vào mã của vụ án đã được đưa ra, nhưng câu hỏi là hai câu (thao tác ngày) rộng. Có lẽ bạn nên bắt đầu bằng cách tìm kiếm các đoạn mã JavaScript và các khóa học trực tuyến.
Rubén

@ Rubén tôi hiểu. Tôi không muốn hỏi một câu hỏi "viết mã cho tôi" vì vậy đã tìm kiếm thông tin chung mà tôi không thực sự tìm thấy. Bài viết của Sergei insas bạn chỉ ra là hữu ích.
hiểu

Về thông tin chung về JavaScript, hãy xem developer.mozilla.org/en-US/docs/Web/JavaScript và về Google Apps Script, xem developers.google.com/apps-script .
Rubén

Câu trả lời:


13

Bắt và thiết lập giá trị datetime

Bất cứ khi nào tập lệnh của bạn gọi .getValue()trên một ô được định dạng là ngày, giờ hoặc thời lượng, nó sẽ nhận được một đối tượng Ngày JavaScript . Sau đó, bạn có thể áp dụng các phương pháp khác nhau được liệt kê trên trang MDN đó cho đối tượng này, bao gồm cả getMonth()tháng. Thí dụ:

  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

Ngược lại, bạn có thể gán một đối tượng Date cho một ô bằng cách sử dụng setValuevà nó sẽ được tự động định dạng như vậy.

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

Múi giờ

Dấu thời gian trong Google Sheets nằm trong múi giờ địa phương, được đặt thông qua cài đặt Tệp> Bảng tính. Tập lệnh cũng hoạt động trong một múi giờ, có thể khác nhau và được tìm thấy trong Thuộc tính tệp> Dự án trong trình chỉnh sửa tập lệnh. Nếu các múi giờ này không đồng ý, bạn sẽ gặp vấn đề với dấu thời gian.

Để kiểm tra xem các múi giờ có đồng ý hay không, bạn có thể so sánh cả hai bằng tay hoặc làm một cái gì đó như thế này:

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

Điều này nhập công thức =date(2015,1,1)trong ô A1. Kết quả sẽ là 2015-01-01 00:00:00 theo múi giờ của bảng tính. Tập lệnh sau đó lấy ngày và trích xuất giờ trong giờ địa phương của tập lệnh. Nếu các múi giờ đồng ý, bạn sẽ thấy 0,0 trong nhật ký.


4

Câu trả lời ngắn

Bên dưới hai chức năng tùy chỉnh được trình bày dưới dạng ví dụ về cách Google Sheets và Google Apps Script có thể hoạt động theo ngày.

Ví dụ 1: Nhận ngày mới nhất

có được ngày mới nhất

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

Ví dụ 2: Lấy tháng của ngày mới nhất

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

Giải thích ngắn gọn

Trong ví dụ đầu tiên, phương thức Math.max JavaScript thực hiện công việc.

Nếu để có được một ngày là kết quả, một đối tượng ngày được tạo bằng cách sử dụng Ngày () mới .

Trong ví dụ thứ hai, một đối tượng ngày được gán cho một biến, sau đó phương thức JavaScript getMonth () được sử dụng để lấy chỉ mục tháng. Hãy nhớ rằng JavaScript sử dụng 0cho phần tử bắt đầu 0là cho tháng một, 1cho tháng hai và như vậy.

Người giới thiệu


i) Có phải date1, date2thông qua như là số (thường là: 54.243)? ii) Bây giờ tôi đã cố gắng trích xuất tháng date2sử dụng date2.getMonth()nhưng khi ô là 01/12/2015nó trả về 10 và 11 cho 02/12/2015. Tôi đoán đó là vì múi giờ. Hàm sheet month()đơn giản hơn rất nhiều.
hiểu

Google Sheets xử lý ngày theo số thứ tự giống như JavaScript nhưng mỗi số có ngày bắt đầu khác nhau. Vì vậy, nếu bạn muốn sử dụng các hàm ngày JavaScript, trước tiên nên chuyển đổi ngày của bảng tính thành ngày JavaScript. Như bạn đã nhận thấy, đường dẫn dễ dàng hơn là sử dụng các hàm bảng tính để xử lý các ngày của bảng tính và các hàm JavaScript để xử lý các ngày JavaScript.
Rubén

@anderpered: Tôi đã thêm một ví dụ thứ hai.
Rubén

Cám ơn bạn một lần nữa. Về ví dụ thứ hai, như tôi đã viết, khi max là 01/12/2015 myfunction2trả về 10 và khi max là 02/12/2015, nó trả về 11. Trong khi tôi ổn với 11, tôi không hiểu tại sao trả lại 10 cho ngày 01/12/2015. Như tôi đã nói, tôi tin rằng điều này là do GMT nhưng tôi không chắc chắn. Tui bỏ lỡ điều gì vậy?
hiểu

@anderpered: tạo một spredsheet demo chia sẻ nó với bất kỳ ai có liên kết chỉ để xem và đăng một câu hỏi mới bao gồm liên kết đến bảng tính demo.
Rubén
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.