12.04.2023
Rumah / Menguasai PC / Menentukan jumlah hari dalam sebulan di Microsoft Excel. Bagaimana cara menghitung jumlah hari di dalamnya dengan satu rumus matematika dengan angka bulan? Selama 13 hari kalender

Menentukan jumlah hari dalam sebulan di Microsoft Excel. Bagaimana cara menghitung jumlah hari di dalamnya dengan satu rumus matematika dengan angka bulan? Selama 13 hari kalender

Untuk mengatasi beberapa masalah saat membuat tabel, Anda perlu menentukan jumlah hari dalam sebulan di sel terpisah atau di dalam rumus agar program menghabiskan perhitungan yang diperlukan. Excel memiliki alat untuk melakukan operasi ini. mari kita pertimbangkan berbagai cara penerapan kemungkinan ini.

Anda dapat menghitung jumlah hari dalam sebulan di Excel menggunakan operator kategori khusus "Tanggal dan waktu". Untuk mengetahui opsi mana yang terbaik untuk diterapkan, Anda harus menetapkan tujuan operasi terlebih dahulu. Bergantung pada ini, hasil perhitungan dapat ditampilkan dalam elemen terpisah pada lembar, atau dapat digunakan di dalam rumus lain.

Metode 1: kombinasi operator DAY dan EOMONTH

Paling dengan cara sederhana untuk mengatasi masalah ini adalah kombinasi operator HARI Dan EOBULAN.

Fungsi HARI termasuk dalam kelompok operator "Tanggal dan waktu". Itu menunjuk ke nomor tertentu 1 sebelum 31 . Dalam kasus kami, tugas diberikan operator akan menunjukkan hari terakhir bulan itu menggunakan fungsi bawaan sebagai argumen EOBULAN.

Sintaks operator HARI Berikutnya:

HARI(tanggal_dalam_format_angka)

Artinya, satu-satunya argumen untuk fungsi ini adalah "Tanggal dalam Format Numerik". Ini akan diatur oleh operator EOBULAN. Harus dikatakan bahwa tanggal dalam format numerik berbeda dengan format biasanya. Misalnya, tanggal 04.05.2017 dalam bentuk numerik akan terlihat seperti 42859 . Oleh karena itu, Excel menggunakan format ini hanya untuk operasi internal. Ini jarang digunakan untuk ditampilkan dalam sel.

Operator EOBULAN dimaksudkan untuk menunjukkan nomor urut hari terakhir bulan itu, yang merupakan jumlah bulan sebelumnya atau mundur dari tanggal yang ditentukan. Sintaks fungsinya adalah:

EOMONTH(tanggal_mulai, jumlah_bulan)

Operator "mulai tanggal" berisi tanggal penghitungan mundur dibuat, atau referensi ke sel tempatnya berada.

Operator "Jumlah bulan" menunjukkan jumlah bulan untuk menghitung dari tanggal yang diberikan.

Sekarang mari kita lihat bagaimana ini bekerja dengan contoh spesifik. Untuk ini kami ambil lembar Excel, di salah satu sel yang memasukkan nomor kalender tertentu. Penting, dengan menggunakan rangkaian operator yang ditunjukkan di atas, untuk menentukan berapa hari dalam periode bulanan yang dirujuk oleh nomor ini.


Rumus umum kami mengambil bentuk berikut:

HARI(EOBULAN(B3,0))

Dalam rumus ini, hanya alamat sel yang merupakan nilai variabel ( B3). Jadi, jika Anda tidak ingin melakukan prosedur melalui Penyihir Fungsi, Anda dapat memasukkan rumus ini ke elemen lembar mana pun, cukup ganti alamat sel yang berisi nomor dengan yang relevan dalam kasus khusus Anda. Hasilnya akan serupa.

Metode 2: deteksi otomatis jumlah hari

Sekarang mari kita lihat masalah lain. Jumlah hari harus ditampilkan bukan menurut nomor kalender tertentu, tetapi menurut yang sekarang. Selain itu, pergantian periode akan dilakukan secara otomatis tanpa campur tangan pengguna. Meski kelihatannya aneh, tapi tugas yang diberikan lebih ringan dari yang sebelumnya. Untuk mengatasinya, bahkan terbuka Panduan Fungsi tidak diperlukan karena rumus yang menjalankan operasi ini tidak berisi nilai variabel atau referensi sel. Anda cukup mengetik sel lembar di mana Anda ingin hasilnya ditampilkan, rumus berikut tanpa perubahan:

HARI(EOBULAN(HARI INI();0))

Fungsi bawaan HARI INI yang kita gunakan dalam kasus ini menampilkan angka hari ini dan tidak memerlukan argumen. Dengan demikian, sel Anda akan selalu menampilkan jumlah hari dalam bulan berjalan.

Metode 3: Hitung jumlah hari yang akan digunakan dalam rumus kompleks

Dalam contoh di atas, kami menunjukkan cara menghitung jumlah hari dalam sebulan menurut tanggal kalender yang ditentukan atau secara otomatis menurut bulan saat ini, menampilkan hasilnya di sel terpisah. Tetapi menemukan nilai ini mungkin diperlukan untuk menghitung indikator lainnya. Dalam hal ini, penghitungan jumlah hari akan dilakukan di dalam rumus kompleks dan tidak akan ditampilkan di sel terpisah. Mari kita lihat bagaimana melakukan ini dengan sebuah contoh.

Kami perlu memastikan bahwa sel menampilkan jumlah hari yang tersisa hingga akhir bulan ini. Seperti dalam metode sebelumnya, opsi ini tidak perlu dibuka Penyihir Fungsi. Anda cukup mengetik ekspresi berikut ke dalam sel:

HARI(EOBULAN(HARI INI();0))-HARI(HARI INI())

Setelah itu, sel yang ditentukan akan menampilkan jumlah hari hingga akhir bulan. Setiap hari hasilnya akan diperbarui secara otomatis, dan dari awal periode baru, hitungan mundur akan dimulai lagi. Ternyata semacam penghitung waktu mundur.

Seperti yang Anda lihat, rumus ini terdiri dari dua bagian. Yang pertama adalah ungkapan yang sudah dikenal untuk menghitung jumlah hari dalam sebulan:

HARI(EOBULAN(HARI INI();0))

Namun di bagian kedua, angka hari ini dikurangi dari indikator ini:

HARI KE HARI())

Jadi, saat melakukan perhitungan ini, rumus menghitung jumlah hari merupakan bagian integral dari rumus yang lebih kompleks.

Metode 4: formula alternatif

Namun sayangnya, versi program sebelum Excel 2007 tidak memiliki operator EOBULAN. Bagaimana dengan para pengguna yang menggunakan versi aplikasi yang lebih lama? Bagi mereka, kemungkinan ini ada melalui formula lain yang lebih masif dari yang dijelaskan di atas. Mari kita lihat cara menghitung jumlah hari dalam sebulan dari nomor kalender tertentu menggunakan opsi ini.

  1. Pilih sel untuk menampilkan hasilnya dan buka jendela argumen operator HARI sudah tidak asing lagi bagi kita. Kami mengatur kursor di satu-satunya bidang di jendela ini dan mengklik segitiga terbalik di sebelah kiri bilah rumus. Pergi ke bagian "Lebih banyak fitur...".
  2. Di jendela Penyihir Fungsi di Grup "Tanggal dan waktu" sorot nama "TANGGAL" dan klik tombolnya OKE.
  3. Jendela operator diluncurkan TANGGAL. Fungsi ini mengonversi tanggal dari format biasa menjadi nilai numerik, yang kemudian harus diproses oleh operator HARI.

    Jendela yang terbuka memiliki tiga bidang. Di lapangan "Hari" Anda dapat memasukkan nomor "1". Ini akan menjadi tindakan yang sama untuk situasi apa pun. Tetapi dua bidang lainnya harus ditangani secara menyeluruh.

    Atur kursor di lapangan "Tahun". Selanjutnya, kita beralih ke pilihan operator melalui segitiga yang sudah dikenal.

  4. Semua dalam kategori yang sama Penyihir Fungsi sorot nama "TAHUN" dan klik tombolnya OKE.
  5. Jendela Argumen Operator diluncurkan TAHUN. Ini menentukan tahun dari nomor yang ditentukan. Di satu-satunya bidang jendela "Tanggal dalam Format Numerik" tentukan referensi ke sel yang berisi tanggal asli yang ingin Anda tentukan jumlah hari. Setelah itu, jangan buru-buru mengklik tombol tersebut OKE dan klik namanya "TANGGAL" di bilah rumus.
  6. Kemudian kita kembali ke jendela argumen lagi TANGGAL. Atur kursor di lapangan "Bulan" dan lanjutkan ke pemilihan fungsi.
  7. DI DALAM Panduan Fungsi klik pada nama "BULAN" dan klik tombolnya OKE.
  8. Jendela argumen fungsi diluncurkan BULAN. Tugasnya mirip dengan operator sebelumnya, hanya menampilkan nilai nomor bulan. Di satu-satunya bidang jendela ini, kami menetapkan referensi yang sama ke nomor asli. Kemudian di bilah rumus, klik namanya "HARI".
  9. Kembali ke jendela argumen HARI. Di sini kita harus membuat satu sentuhan kecil saja. Di satu-satunya bidang jendela tempat data sudah berada, tambahkan ekspresi ke akhir rumus "-1" tanpa tanda kutip, dan beri juga "+1" setelah operator BULAN. Setelah itu, klik tombolnya OKE.
  10. Seperti yang Anda lihat, sel yang dipilih sebelumnya menampilkan jumlah hari dalam bulan di mana nomor tersebut berada. Rumus umumnya terlihat seperti ini:

    HARI(TANGGAL(TAHUN(H3),BULAN(H3)+1,1)-1)

Rahasia formula ini sederhana. Kami menggunakannya untuk menentukan tanggal hari pertama periode berikutnya, dan kemudian mengurangi satu hari darinya, mendapatkan jumlah hari di bulan yang ditentukan. Variabel dalam rumus ini adalah referensi sel D3 di dua tempat. Jika Anda menggantinya dengan alamat sel tempat tanggal berada dalam casing khusus Anda, maka Anda dapat langsung masuk ekspresi yang diberikan ke elemen lembar apa pun tanpa bantuan Penyihir Fungsi.

Seperti yang Anda lihat, ada beberapa opsi untuk mengetahui jumlah hari dalam sebulan di Excel. Yang mana yang akan digunakan bergantung pada tujuan akhir pengguna, serta versi program mana yang dia gunakan.

Kalkulator online gratis Kontur.Akuntansi akan membantu Anda dan memberi tahu Anda berapa hari telah berlalu di antara keduanya tanggal yang diberikan Dan. Selain itu, jika Anda memiliki kebutuhan, Anda dapat menghitung berapa banyak kalender, hari libur atau hari kerja (jam) yang berisi periode tertentu dalam setahun atau beberapa tahun.

Berapa hari antara tanggal? Petunjuk

Anda cukup menetapkan hari awal dan akhir tertentu dan mendapatkan perhitungan dalam sepersekian detik. Kalkulator online menghitung semua data secara mandiri. Jika Anda mengubah hari asli dalam seminggu, hasilnya secara otomatis dihitung ulang untuk memperhitungkan tahun kabisat.

Penting: Anda tidak dapat mengambil hari/jam kerja bulanan dari perhitungan untuk tahun-tahun sebelumnya dan memberikannya sebagai perhitungan - data akan bervariasi. Karena itu, lebih baik menggunakan kalkulator.

Jadi, prosedurnya adalah:

  1. Di bidang "Tanggal mulai" dan "Tanggal akhir", pilih masing-masing hari mulai dan akhir hitungan mundur, mulai dari 2013 dan berakhir pada 2018 mendatang.
  2. Tetapkan jumlah jam kerja per hari di bidang berikutnya. Secara default, bidang ini sudah disetel ke 8 jam (minggu kerja 40 jam), tetapi Anda dapat mengubah angka ini.
  3. Di sisi kanan layar pada spanduk Anda akan melihat hasilnya: hari kerja, hari kalender, dan jam kerja antara tanggal yang ditentukan. Hasilnya harus disalin dan disimpan dalam dokumen Anda.

Untuk apa Anda menggunakan kalkulator?

  1. Untuk menghitung penalti dan keterlambatan berdasarkan kontrak
  2. Bagaimana memahami efisiensi penggunaan sumber daya dan tenggat waktu penggunaannya
  3. Bagaimana tidak sengaja menjadwalkan tugas di akhir pekan
  4. Berapa banyak waktu yang tersisa sampai batas waktu

Contoh:

Anda adalah seorang akuntan. Manajer meminta Anda untuk memberikan data tentang jumlah jam kerja yang harus dikerjakan oleh semua karyawan perusahaan pada bulan Februari dalam beberapa menit ke depan. Anda dapat dengan mudah menentukan jumlah karyawan - Anda memiliki angka di depan mata Anda. Tapi harus dihitung jumlah jamnya…. Dan ada berapa hari di bulan Februari? Bagaimana dengan tahun kabisat? Hari apa hari libur? Dan bagaimana cara menentukan jumlah hari libur?

Solusi: cukup gunakan widget kami. Anda akan menerima semua informasi secara otomatis, Anda tidak memerlukan kalender dan kalkulator desktop.

Apakah Anda menyukai kalkulator ini? Kemudian coba fitur kami yang lain

Apakah Anda ingin menyimpan akuntansi, mengirim laporan, dan membuat perhitungan dalam layanan web yang nyaman dan sederhana? Coba Kontur.Akuntansi gratis 14 hari! Kami akan segera mengajari Anda cara menggunakan layanan ini dan menjawab semua pertanyaan Anda!

Catatan: postingan ini merupakan terjemahan dari artikel cmcenroe.me/2014/12/05/days-in-month-formula.html ( Bagian I), serta tambahan penulis untuk itu ( Bagian II). Anda tidak boleh menganggap serius materi tersebut, melainkan sebagai pemanasan untuk pikiran, yang tidak membutuhkan apa pun selain pengetahuan aritmatika sekolah dan tidak memiliki aplikasi praktis. Selamat membaca semuanya!

Bagian I

Perkenalan

Baru-baru ini, setelah malam tanpa tidur, saya berpikir tentang metode untuk mengingat jumlah hari di setiap bulan dalam setahun. Ada penghitung untuk ini, serta cara untuk mengandalkan buku-buku jari, tetapi tidak ada yang cocok untuk saya. Saya bertanya-tanya apakah ada rumus matematika untuk memecahkan masalah seperti itu, dan - karena tidak menemukannya dalam studi sepintas - saya menantang diri saya sendiri untuk membuatnya.

Formalisasi Dengan kata lain, perlu dicari fungsinya F, sehingga nilainya f(x) untuk setiap bulan X, diwakili oleh angka antara 1 dan 12, sama dengan jumlah hari dalam bulan tersebut. Tabel nilai argumen dan fungsi:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Jika Anda tergoda untuk mencobanya sendiri sebelum membaca solusi saya, sekaranglah waktunya. Jika Anda lebih suka langsung melihat jawaban yang sudah selesai, lihat di bawah spoiler.

Menjawab


Berikut adalah langkah-langkah saya untuk menemukan solusinya.

Peralatan matematika

Pertama, mari segarkan ingatan kita secara singkat tentang dua operator penting dalam menyelesaikan soal ini: pembagian bilangan bulat dan sisa pembagian.

Divisi bilangan bulat adalah operator yang digunakan dalam banyak bahasa pemrograman saat membagi dua bilangan bulat dan membuang hasil bagi bagian pecahan. Saya akan menggambarkannya sebagai. Misalnya:

Sisa pembagian adalah operator yang mencari sisa pembagian. Banyak bahasa pemrograman menggunakan simbol tersebut % , tetapi saya akan menggunakan konstruksi form , misalnya:

Saya perhatikan bahwa sisa pembagian memiliki prioritas yang sama dengan pembagian.

Dasar

Jadi, kami menerapkan alat matematika kami untuk mendapatkan rumus dasar. Bulan normal memiliki 30 atau 31 hari, jadi kita dapat menggunakan 1 atau 0 untuk mendapatkan secara bergantian, lalu tambahkan konstanta ke angka tersebut:

Kami mendapatkan tabel, nilai yang benar disorot dengan huruf tebal:
X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Bukan awal yang buruk! Sudah ada nilai yang benar untuk Januari dan untuk bulan Maret hingga Juli inklusif. Februari adalah kasus khusus, dan kami akan membahasnya nanti. Setelah Juli, untuk bulan-bulan yang tersisa, urutan memperoleh 0 dan 1 harus dibalik.
Untuk melakukan ini, kita dapat menambahkan 1 ke dividen:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

Sekarang nilai yang benar adalah dari Agustus hingga Desember, tetapi seperti yang diharapkan, nilai untuk bulan lainnya salah. Mari kita lihat bagaimana kita bisa menggabungkan formula ini.

Menerapkan masker

Ini membutuhkan fungsi sepotong-sepotong, tetapi - karena menurut saya membosankan - saya memikirkan cara lain untuk menyelesaikannya, menggunakan satu bagian fungsi pada satu interval, yang lain pada interval lainnya.
Saya pikir cara termudah adalah menemukan ekspresi yaitu 1 dalam satu aplikasi dan 0 di aplikasi lainnya. Metode di mana, dengan mengalikan argumen dengan ekspresi, kami mengecualikannya dari rumus di luar cakupannya, saya sebut "masking", karena perilaku ini mirip dengan semacam bit mask.
Untuk menggunakan metode ini, di bagian terakhir fungsi kita, kita perlu menemukan ekspresi yang sama dengan 1 dengan , dan - karena nilai argumen selalu kurang dari 16 - pembagian bilangan bulat dengan 8 baik untuk ini.
X 1 2 3 4 5 6 7 8 9 10 11 12
X ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Sekarang dengan bantuan topeng ini, menggunakan ekspresi alih-alih 1 dalam pembagi, kita dapat membalikkan urutan 0 dan 1 diperoleh dalam rumus:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Eureka! Semuanya benar, kecuali Februari. Kejutan kejutan.

Februari

Setiap bulan memiliki 30 atau 31 hari, kecuali Februari dengan 28 hari (tahun kabisat di luar cakupan tugas ini). Saat ini, menurut rumus kami, ia memiliki 30 hari, jadi alangkah baiknya untuk mengurangi ekspresi yang sama dengan 2 dengan .
Yang terbaik yang saya buat adalah yang ini, yang menutupi semua bulan setelah Februari:
X 1 2 3 4 5 6 7 8 9 10 11 12
2 mod X 0 0 2 2 2 2 2 2 2 2 2 2

Dengan mengubah konstanta dasar menjadi 28 dengan menambahkan 2 ke sisa bulan, kami mendapatkan rumus:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

Sayangnya, Januari sekarang lebih pendek 2 hari. Tapi untungnya, sangat mudah untuk mendapatkan ekspresi yang hanya berlaku untuk bulan pertama: kebalikan dari angka yang dibulatkan ke bawah. Mengalikannya dengan 2, kita mendapatkan rumus terakhir:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Kata penutup

Ini dia - rumus untuk mendapatkan jumlah hari di bulan mana pun dalam setahun, menggunakan aritmatika paling sederhana. Lain kali Anda ingat berapa hari di bulan September, lakukan saja dengan JavaScript one-liner ini:

Fungsi f(x) ( return 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); )

Bagian II

Perkenalan

Pada bagian pertama diperoleh rumus yang singkat bahkan sedikit elegan, keunggulan utamanya adalah kesederhanaan alat matematika, tidak adanya percabangan dan ekspresi bersyarat, dan keringkasan. Kerugiannya - selain fakta bahwa Anda tidak akan menggunakannya dalam proyek Anda - termasuk kurangnya pemeriksaan tahun kabisat dan non-kabisat.
Jadi saya mengatur sendiri tugas membuat fungsi F, sehingga nilainya f(x, y) untuk setiap bulan X, diwakili oleh angka dari 1 hingga 12 dan tahun y lebih besar dari 0 sama dengan jumlah hari dalam sebulan X per tahun y.
Bagi yang sudah tidak sabar sudah ada jawaban yang sudah jadi di bawah spoiler, tapi untuk selebihnya silahkan follow saya.

Menjawab

Sisa pembagian: mod Dan ⌊⌋

Untuk kejelasan visual, kami setuju bahwa dalam beberapa rumus, operator pembagian dengan sisa diganti dengan tanda kurung bawah, yang menurut saya perlu:

Tahun kabisat

Pada tahun kabisat, satu hari ekstra diperkenalkan: 29 Februari. Seperti yang Anda ketahui, tahun kabisat adalah tahun kelipatan 4 dan bukan kelipatan 100, atau kelipatan 400. Mari kita tulis ekspresi yang identik dengan pernyataan ini:

Untuk mengubah ekspresi ini menjadi ekspresi aljabar, perlu menerapkan injeksi formulir ke hasil ekspresi:

Yang memungkinkan Anda mendapatkan 1 saat membagi tanpa sisa dan 0 saat membagi dengan sisa, untuk digunakan dalam rumus menentukan jumlah hari dalam sebulan.

Sebagai fungsi G" Anda dapat menggunakan 1 dikurangi sisanya untuk:

X 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Ketakterbatasan 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Sangat mudah untuk melihat bahwa dengan meningkatkan pembagi dan pembagi dengan 1, kita mendapatkan rumus yang tepat untuk:
X 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Jadi, kami menulis ekspresi sebagai:


Mari kita menulis ekspresi sebagai:

Menerapkan pendekatan ini, kita dapatkan fungsi berikutnya g(y), yang akan menjadi 1 jika tahun tersebut adalah tahun kabisat, atau 0 sebaliknya:

y 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g(y) 0 0 1 0 0 0 1 0 0 0 1
y 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g(y) 1 0 0 0 1 0 0 0 1 0 0

Tahun kabisat disorot dengan huruf tebal.

Saya mengingatkan Anda bahwa dalam kerangka perjanjian yang diterima, operator untuk mendapatkan sisa dari divisi dapat digambarkan sebagai mod, Dan ⌊⌋.

Menerapkan masker

Dalam rumusnya, bagian tersebut merupakan penyesuaian yang menambahkan 2 hari ke bulan Januari. Jika kita menghilangkan faktor 2 dan mengubah pembilangnya dari 1 menjadi 2, maka rumus ini akan menambahkan 2 hari ke Januari dan 1 hari ke Februari, yang memberi kita kunci untuk menjumlahkan satu hari dalam tahun kabisat. Untuk kejelasan, kami menggunakan nilai perantara dalam rumus g(y) dan sebagai y menggunakan tahun 2000 (tahun kabisat) dan 2001 (bukan tahun kabisat):

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Nilai untuk semua bulan kecuali Januari pada tahun non-kabisat sudah benar.

Untuk memperbaiki kesalahpahaman yang tidak menguntungkan ini, tambahkan 1 hari ke Januari dengan rumus yang sudah kita ketahui:


Atau:

X 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Kesimpulan

Akibatnya, formula yang jauh lebih rumit, tetapi lebih universal diperoleh, yang juga dapat digunakan untuk mendapatkan jumlah hari dalam satu bulan pada tahun tertentu:

Fungsi f(x, y) ( return 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1))) / x) + Lantai Matematika(1/x) - Lantai Matematika(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1 )) + (1 - (y % 400 + 2) % (y % 400 + 1)))/x); )
Contoh C# ideone.com/fANutz .

1 . Saya tidak tahu bagaimana menggunakan mnemonik seperti itu, jadi saya melihat tanda di Internet.
2 . "Dasar", atau "Aturan Dengan Banyak Pengecualian", seperti kebanyakan aturan.
3 . Awalnya, dalam kalender Romawi, Februari adalah bulan terakhir dalam setahun, jadi masuk akal bahwa ini lebih pendek dari yang lainnya. Ada juga logika menambahkan atau menghapus hari tepat di akhir tahun, jadi panjangnya bervariasi.

Pembaruan 1:
Terjemahan alternatif dari bagian pertama dalam

Kalkulator tanggal dirancang untuk menghitung jumlah hari di antara tanggal, serta untuk menemukan tanggal dengan menambahkan atau mengurangi jumlah hari tertentu ke tanggal yang diketahui.

Tambahkan hari ke tanggal

Untuk mengetahui tanggal berapa dalam beberapa hari tertentu, gunakan opsi ini. Masukkan tanggal mulai dan jumlah hari untuk ditambahkan. Untuk mengurangkan, gunakan nilai minus. Kalkulator juga memiliki opsi untuk menambahkan hari kerja saja.

Menghitung jumlah hari antara tanggal

Metode perhitungan ini akan menjawab pertanyaan "berapa hari telah berlalu sejak tanggal tersebut". Masukkan tanggal mulai dan tanggal akhir dan klik tombol "hitung". Kalkulator akan menunjukkan berapa hari antara tanggal yang dimasukkan. Secara terpisah, kalkulator akan menampilkan jumlah hari kerja.

Dengan opsi ini, Anda dapat menghitung berapa hari tersisa hingga acara tertentu, seperti ulang tahun atau hari libur. Untuk melakukannya, masukkan tanggal hari ini di kolom tanggal mulai, dan tanggal acara di kolom tanggal akhir.

Liburan

Kalkulator dapat menghitung, menambah dan mengurangi hari kalender dan hari kerja. Hari libur resmi tidak bekerja adalah:

  • 1,2,3,4,5,6,8 Januari - liburan Tahun Baru
  • 7 Januari - Natal Ortodoks
  • 23 Februari - Hari Pembela Tanah Air
  • 8 Maret - Hari Perempuan Internasional
  • 1 Mei - Hari Musim Semi dan Buruh
  • 9 Mei - Hari Kemenangan
  • 12 Juni - Hari Rusia
  • 4 November - Hari Persatuan Nasional

Jika hari libur nasional jatuh pada hari Sabtu atau Minggu, maka dipindahkan ke hari kerja berikutnya. Namun terkadang akhir pekan dipindahkan ke tempat yang sama sekali berbeda di kalender. Misalnya, hari Sabtu dan Minggu yang jatuh pada libur tahun baru dapat dipindahkan ke bulan Mei untuk memperpanjang libur bulan Mei.

Saat menghitung hari, kalkulator memperhitungkan hari libur resmi dan semua transfer.

Baru-baru ini, setelah lama menghabiskan waktu tanpa tidur, saya berpikir tentang bagaimana Anda bisa mengetahui jumlah hari dalam sebulan, dengan mengetahui jumlahnya. Ada sajak anak-anak tentang topik ini, ada cara menghitung dengan tulang, tetapi metode ini tidak cocok untuk saya - saya terjun ke pencarian rumus matematika, yang saya simpulkan setelah beberapa saat.

Jadi tugasnya

Secara formal Dengan kata lain, kita perlu mendapatkan fungsi f (x), yang akan memberikan daftar nilai berikut (yang, omong-omong, saya temukan di suatu tempat di Internet, dan tidak menyimpulkan menggunakan aturan mnemonik):

Perlu dicatat bahwa kami hanya menerima jumlah bulan sebagai argumen, mis. kami tidak memperhitungkan tahun kabisat, dan f(2) = 28.

Jika Anda ingin mengetahui hasil yang saya dapatkan, gulir ke bagian bawah halaman ini. Apa yang akan dijelaskan di bawah ini adalah turunan dari rumus yang diinginkan.

Apa yang akan kita gunakan

Selain penjumlahan, pengurangan dan perkalian, saya akan menggunakan dua operasi: pembagian bilangan bulat dan operasi mengambil sisa. Biarkan saya mengingatkan Anda apa itu:

  • Divisi bilangan bulat, atau "pembagian pembulatan ke bawah". Bagi saya itu akan direpresentasikan sebagai pembagian normal: a / b - artinya ⌊a / b⌋ . Misalnya, 5/3 = 1 .
  • Mengambil modulo sisanya. Saya biasanya menunjukkan pembagian dengan sisa: a % b \u003d a - (a / b) * b. Misalnya, 5 % 3 = 2 .

Mereka memiliki prioritas yang sama dan dibiarkan asosiatif.

Fundamental, atau Aturan dengan Banyak Pengecualian

Mari kita coba menemukan pola yang akan memenuhi sebanyak mungkin nilai argumen. Biasanya jumlah hari dalam sebulan berfluktuasi antara 30 dan 31. Pada saat yang sama, Anda dapat melihat ketergantungan angka ini pada kemerataan bulan - yang berarti kami akan menggunakan operasi mengambil sisa modulo 2. Sepertinya bahwa itu harus seperti:

f₁(x) = 30 + x%2


Awal yang bagus! Mengabaikan Februari, yang jelas harus menggunakan beberapa trik, kami akan senang bahwa kami dapat menyesuaikan fungsi untuk paruh pertama tahun ini. Dan kemudian, mulai Agustus, paritas harus diubah menjadi kebalikannya. Ini bisa dilakukan dengan mengganti x%2 di versi pertama rumus (x+1)%2:

f₂(x) = 30 + (x + 1) % 2


Seperti yang diharapkan, paruh pertama tahun ini sekarang berada di luar kisaran nilai yang benar, tetapi bulan Agustus hingga Desember memberikan apa yang kami butuhkan. Mari cari cara untuk menggabungkan kedua bagian ini.

Masker

Kami membutuhkan +1 dalam dividen untuk "mengaktifkan" hanya ketika argumen mencapai nilai lebih besar dari 8, mis. kita perlu menerapkan beberapa topeng. Pada saat yang sama, nilai argumen tidak boleh melebihi 12. Jadi, pembagian bilangan bulat dari argumen dengan 8 sangat ideal untuk kita:


Persis seperti yang kita butuhkan. Mari kita gunakan output ini:

f₃(x) = 30 + (x + x / 8) % 2


Wow! Semuanya benar, kecuali Februari. Betapa tak terduga.

Februari

Semua bulan memiliki 30 atau 31 hari, tetapi Februari memiliki 28 hari (izinkan saya mengingatkan Anda bahwa kami tidak menganggap tahun kabisat).

Referensi sejarah: dalam kalender Romawi, Februari adalah bulan terakhir dalam setahun - setuju bahwa menambahkan satu hari dalam tahun kabisat ke akhir kalender lebih intuitif. Namun, kami menggunakan kalender Gregorian, di mana bulan terpendek dipindahkan mendekati awal atas perintah salah satu penguasa yang bijak.

Dalam versi terbaru formula kami untuk bulan Februari mendapat sebanyak 30 hari. Jadi kita perlu memotong beberapa hari darinya. Secara alami, beberapa bulan lain juga akan menderita karena ini: baik di sebelah kiri Februari, atau di sebelah kanannya dalam daftar kami - namun, ada lebih sedikit bulan di sebelah kanan, jadi kami harus mengorbankan Januari, lalu menyesuaikan rumus untuk itu. Anda dapat memotong hari untuk bulan pertama dan kedua menggunakan ekspresi 2% x.