Tôi muốn tìm số thứ Sáu cho một tháng cụ thể thông qua chức năng trong Bảng tính Google.
Ví dụ: cho tháng 1 năm 2014 , giá trị sẽ là 5
và cho tháng 2 năm 2014 , giá trị sẽ là 4
.
Làm thế nào tôi có thể làm điều đó?
Tôi muốn tìm số thứ Sáu cho một tháng cụ thể thông qua chức năng trong Bảng tính Google.
Ví dụ: cho tháng 1 năm 2014 , giá trị sẽ là 5
và cho tháng 2 năm 2014 , giá trị sẽ là 4
.
Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Đây là cách thực hiện điều đó với Google Apps Script.
function specificDays(dayName, monthName, year) {
// set names
var monthNames = ["January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saterday"
];
// change string to index of array
var day = dayNames.indexOf(dayName);
var month = monthNames.indexOf(monthName)+1;
// determine the number of days in month
var daysinMonth = new Date(year, month, 0).getDate();
// set counter
var sumDays=0;
// iterate over the days and compare to day
for(var i=1; i<=daysinMonth; i++) {
var checkDay = new Date(year, month-1, parseInt(i)).getDay();
if(day == checkDay) {
sumDays ++;
}
}
// show amount of day names in month
return sumDays;
}
Thêm tập lệnh qua Công cụ> Trình chỉnh sửa tập lệnh trong menu. Lưu tập lệnh và bạn đang di chuyển !!
Tôi đã tạo một tệp ví dụ cho bạn: Số lượng tên ngày trong tháng
=NETWORKDAYS.INTL(DATE(2017,10,1),EOMONTH(DATE(2017,10,1),0),"1111011")
NETWORKDAYS.INTL (start_date, end_date, [cuối tuần], [holiday])
cuối tuần - [TÙY CHỌN - 1 theo mặc định] - Một số hoặc chuỗi biểu thị các ngày trong tuần được coi là cuối tuần.
Phương thức chuỗi: cuối tuần có thể được chỉ định bằng bảy 0 và 1, trong đó số đầu tiên trong tập đại diện cho thứ Hai và số cuối cùng là vào Chủ nhật. Số không có nghĩa là ngày là ngày làm việc, số 1 có nghĩa là ngày là ngày cuối tuần. Ví dụ, ăn 0000011, có nghĩa là thứ bảy và chủ nhật là cuối tuần.
Tôi đã chia nó ra bằng cách xem tuần đầu tiên (có thể là một phần):
IF(6>=WEEKDAY(A1),1,0)
Sau đó, số lượng của cả tuần:
QUOTIENT(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)
Sau đó, một phần hoặc tuần trống cuối cùng:
IF(MOD(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)>=6,1,0)
Cung cấp cho chúng tôi toàn bộ công thức:
=IF(3>=WEEKDAY(A1),1,0)+QUOTIENT(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)+IF(MOD(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)>=6,1,0)
Điều này phụ thuộc vào độ chính xác EOMONTH()
, có khả năng là một cuộc gọi tốt - nên an toàn hơn trước những năm nhuận, v.v.
Đặt A1 là ngày đầu tiên của tháng được đề cập. Sau đó:
=CEILING((DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7)
Điều này hoạt động cho bất kỳ ngày nào trong tuần, chỉ cần thay đổi 6
sau MOD(
sang ngày tương ứng trong tuần.
Làm thế nào nó hoạt động:
6 - WEEKDAY(A1)
Điều này tính các ngày giữa ngày đầu tiên của tháng và thứ Sáu gần nhất. Tuy nhiên, chúng tôi muốn chỉ tìm kiếm số ngày cho đến thứ Sáu tiếp theo .
MOD(6 - WEEKDAY(A1), 7)
Điều này trả về số ngày giữa ngày đầu tiên của tháng và thứ sáu đầu tiên của tháng.
DAY(EOMONTH(A1, 0))
Điều này trả về số ngày của ngày cuối cùng của tháng. Nói cách khác, tổng số ngày trong tháng.
DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)
Trừ các ngày giữa ngày đầu tiên của tháng và thứ sáu đầu tiên của tháng so với tổng số ngày trong tháng. Điều này trả về tổng số ngày từ (và bao gồm) thứ Sáu đầu tiên của tháng và cuối tháng.
DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7
Chia số này cho 7, cho bạn biết có bao nhiêu tuần giữa ngày thứ Sáu đầu tiên của tháng và cuối tháng. Ví dụ: nếu tháng 2 có 28 ngày và
CEILING((DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7)
Làm tròn số tuần lên để xác định tổng số thứ Sáu.
Ví dụ: nếu ngày đầu tiên của tháng 7 là thứ tư, có hai ngày đầy đủ vào tháng 7 trước ngày thứ sáu đầu tiên của tháng 7. Tháng 7 có 31 ngày, vì vậy có 29 ngày kể từ (và bao gồm) thứ Sáu đầu tiên. Phạm vi 29 ngày, bắt đầu từ Thứ Sáu đầu tiên, cho phép 4 tuần đầy đủ, cộng thêm một ngày. Vì chúng tôi bắt đầu vào thứ Sáu, ngày bổ sung cũng là thứ Sáu.
Công thức này cũng sẽ hoạt động:
=QUOTIENT(DAY(EOMONTH(A1, 0)) - WEEKDAY(EOMONTH(A1, 0)) + 6, 7) + IF(WEEKDAY(EOMONTH(A1, 0)) > 5, 1, 0)
Sẽ sạch hơn nhiều nếu bạn đang muốn đếm số ngày chủ nhật vì nó có thể được đơn giản hóa thành:
=QUOTIENT((DAY(EOMONTH(A1, 0)) - WEEKDAY(EOMONTH(A1, 0)) + 7), 7)