面试题:JS获取某月的天数

简介: 获取某个月的天数,这个题一般都是在学 switch(){} 一章的案例。我们一直解题的方案是根据一个顺口溜:一三五七八十腊,31天永不差,四六九十一,每月30天,惟有二月二十八,闰年要把日加一。(我搜的,具体怎么背我忘了)这里面还有个闰年的计算规则:四年一闰,百年不闰,四百年再闰。可以被4整除,但是不能被100整除,除非可以被400整除。

bVcKQwD.webp.jpg

是不是被上面的魔性概念征服了?接来下我们来实现一下


面试题:JS 获取某月的天数


先上测试用例


function getMonthCountDay(year, month){
    // year 为年份,month 为月份
}
[[2000,2],[2000,1],[2000,3],[2000,4],[2100,2],[2100,1],[2100,3],[2100,4],[2104,2],[2104,1],[2104,3],[2104,4],[2105,2],[2105,1],[2105,3],[2105,4],].map(v=>`${v} => ${getMonthCountDay.apply(null,v)}天`)


基础版本


根据我们的顺口溜我们来写一下

function getMonthCountDay (year, month) {
  switch (month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return 31
    case 4:
    case 6:
    case 9:
    case 11:
        return 30
    case 2:
        return year%400==0?(29):(year%4!=0||year%100==0?28:29)
  }
}


很好写完了,除了代码看上去多了点,没别的毛病。


测试截图


bVcKQAx.webp.jpg


借助 Date API 处理日期溢出特性(进位)


接下来就开始骚了

function getMonthCountDay (year, month) {
  return 32 - new Date(year, month-1, 32).getDate()
}


是不是想不到,这种方法写的一下就很少了。


bVcKQAC.webp.jpg


测试截图


bVcKQAx.webp (1).jpg


方案原理


js 中 Date 在处理时间的时候会做进位退位操作


bVcKQBV.webp.jpg

借助 Date API 处理日期溢出特性(退位方案)


刚才是用的进位,然后减去多余的。现在我们改用退位


function getMonthCountDay (year, month) {
  return new Date(year, month, 0).getDate()
}


bVcKQC7.webp.jpg


测试截图


bVcKQCR.webp.jpg


方案原理


js 中 Date 在处理时间的时候会做进位退位操作


bVcKQDO.webp.jpg


利用这个特性还可以做什么?


bVcKQD1.webp.jpg


获取月初是周几


7.png


获取月末是周几


bVcKQFx.webp.jpg


相关文章
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
278 3
|
自然语言处理 JavaScript 前端开发
当面试官再问我JS闭包时,我能答出来的都在这里了。
闭包(Closure)是前端面试中的高频考点,广泛应用于函数式编程中。它不仅指函数内部定义的函数,还涉及内存管理、作用域链和垃圾回收机制。闭包可以让函数访问其外部作用域的变量,但也可能引发内存泄漏等问题。通过合理使用闭包,可以实现模块化、高阶函数和回调函数等应用场景。然而,滥用闭包可能导致代码复杂度增加、调试困难以及潜在的性能问题。为了避免这些问题,开发时应谨慎处理闭包,避免不必要的嵌套,并及时清理不再使用的变量和监听器。
568 16
当面试官再问我JS闭包时,我能答出来的都在这里了。
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
542 156
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
JavaScript 前端开发 UED
小白请看! 大厂面试题 :如何用JS实现瀑布流
小白请看! 大厂面试题 :如何用JS实现瀑布流
|
JavaScript
分享经典面试题:JS数组去重的多种方法
分享经典面试题:JS数组去重的多种方法
|
JavaScript 前端开发
前端面试02(JS)
本文是前端面试系列的第二篇,主要涵盖了JavaScript的基础知识,包括JS的组成(ECMAScript、DOM、BOM)、内置对象(如String、Array、Math、Date等)、数组操作方法、数据类型检测方法(typeof、instanceof、constructor、Object.prototype.toString.call)、闭包的概念及其特点、前端内存泄漏的原因和类型、事件委托的优势、基本数据类型与引用数据类型的差异、原型链的工作原理以及JS实现继承的多种方式(原型链、构造函数、组合继承等)。文章结尾鼓励读者点赞和支持作者。
212 1
|
JSON JavaScript 前端开发
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码