Đếm số thứ Sáu trong một tháng cụ thể


7

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à 5và 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:


3

Đâ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;
}

Ảnh chụp màn hình

nhập mô tả hình ảnh ở đây

Nhận xét

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 !!

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: Số lượng tên ngày trong tháng


cảm ơn bạn cho bài viết của bạn và kịch bản tuyệt vời. Các kịch bản owrks tốt nhưng các tính toán trong đó là propably sai: - (... Ví dụ khi xin số thứ Tư trong Novemeber 2014 hoặc tháng mười hai một khác nó sẽ trả về 5 nơi như chỉ có 4 thứ Tư ...
Jacob Jan Tuinstra

Cảm ơn con trỏ Thomas. Tôi đã sửa đổi kịch bản và các tính toán có vẻ ổn.
Jacob Jan Tuinstra

3
=NETWORKDAYS.INTL(DATE(2017,10,1),EOMONTH(DATE(2017,10,1),0),"1111011")

Đồng bộ

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.


3

Giả sử tháng 1 năm 2014 là A1 và số ngày trong tuần là B1 (Thứ Sáu là 6):

=CEILING((DATEDIF(A1,EDATE(A1,1), "D")-MOD(B1-WEEKDAY(A1)+7, 7))/7, 1)

Tôi nghĩ đơn giản hơn


2

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.


1

Đặ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 6sau 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.


0

Giả sử tháng / năm là bằng A1 và nếu có một ngày cụ thể là ngày 1, vui lòng thử:

=IF(AND(WEEKDAY(EOMONTH(A1,0))=6,EOMONTH(A1,0)-EOMONTH(A1,-1)=29),5,IF(OR(AND(EOMONTH(A1,0)-EOMONTH(A1,-1)=31,WEEKDAY(A1)>3),AND(EOMONTH(A1,0)-EOMONTH(A1,-1)=30,OR(WEEKDAY(A1)=5,WEEKDAY(A1)=6))),5,4))

-1

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)
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.