亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Js如果沒有了getDay,怎么獲取某天是星期幾?

標簽:
JavaScript

昨天在《枕边算法书》看到一个撩妹技巧:“美丽的女士,请您随便说一个年份,我会猜出当年的情人节是星期几”。那这哥们是如何快速的算出的呢?书中提到了康威的末日算法,其原理就是设立一个基点,根据星期以7为循环的原理和对闰年的考虑。

为了获取某天是星期几,用这个末日算法还是很麻烦。在JavaScript中有一个可爱的 getDay(),它可以获取我们想要的结果。例如:

// 获取今天星期几new Date().getDay();// => 得到0 ~ 6 的一个数值,代表星期日 ~周期六// 获取某天星期几new Date('2018/6/3').getDay();// => 0    (星期日)

注意:'2018-6-3' 这种格式在ios下会有兼容性问题

那问题来了,如果不用getDay,我们如何获取某天是星期几?
答案是:通过基姆拉尔森计算公式

基姆拉尔森计算公式

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
w的值范围0~6(星期一~星期日)注意/是整除
在公式中d表示日期中的日数, m表示月份数, y表示年数。
注意: 在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月, 例: 如果是2018/1/1 则换算成: 2017/13/1 来代入公式计算

下面来看下代码:

function getWeek(y, m, d) {  const startWeek = 1;  if (m < 3) {
    m += 12;
    --y;
  }  return (d + startWeek + 2 * m + Math.floor(3 * (m + 1) / 5) + y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400)) % 7;
}function getWeekText(y, m, d) {  const aWeekTxt = ['周日', '星期一', '星期二', '星期三', '星期四', '星期五', '周六']  return aWeekTxt[getWeek(y, m, d)];
}

在基姆拉尔森中/是整除,所以在JavaScript中我们要用Math.floor进行取整数的处理,不然计算结果就会有问题。在getWeek中定义了一个startWeek=1的常量,在原公式返回的结果是0~6代表周一到周日,而在JavaScript:0代表周日,我们通过d+1使返回的结果和getDay的结果一样,当然weekStart也可以定义成你想要的星期。



作者:内孤
链接:https://www.jianshu.com/p/5fb65afb16a3


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消