2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPとJavascriptとMySQLの曜日コード

Last updated at Posted at 2018-07-09

#MySQLで日付型から曜日を取得する

MySQL上で日付型から曜日を取得できる関数は2つあります。

##DAYOFWEEK(date)

戻り値

code 曜日
1 日曜日
2 月曜日
3 火曜日
4 水曜日
5 木曜日
6 金曜日
7 土曜日

##WEEKDAY(date)

戻り値

code 曜日
0 月曜日
1 火曜日
2 水曜日
3 木曜日
4 金曜日
5 土曜日
6 日曜日

#JavascriptのDate.getDay()の戻り値

戻り値

code 曜日
0 日曜日
1 月曜日
2 火曜日
3 水曜日
4 木曜日
5 金曜日
6 土曜日

#PHPのdate('w')の戻り値

戻り値

code 曜日
0 日曜日
1 月曜日
2 火曜日
3 水曜日
4 木曜日
5 金曜日
6 土曜日

#曜日コードを揃えたい場合(PHP,Javascriptベース)

言語等 関数
php date('w')
Javascript Date.getDay()
MySQL DAYOFWEEK(date) - 1

※ただし下記のビット演算を使用したい場合は全てに+1しておいた方が好都合。

#曜日コードを揃えたい場合(複数選択のビット演算想定ベース)

言語等 関数
php date('w') + 1
Javascript Date.getDay() + 1
MySQL DAYOFWEEK(date)

#やりたいこと = 曜日を複数選択して保持したい & 該当曜日かどうか判定したい

やりたいことはよくある定休日とかの曜日判定ですが、上記は全部ばらばら。。

  • SQLにあまり頑張らせたくないのでJavascript側で加工は頑張る想定でコードはMySQLベースで考える。
  • 複数選択された曜日はholidaysとしてMath.pow(2, [1:日曜日~7:土曜日] - 1)の和を保持する。
  • MySQLのWEEKDAY(date)はコードの最小値が月曜日なので面倒。対応しない。

で、こうやってみる

dateが複数選択された曜日か判定.js
!!(holidays & Math.pow(2,date.getDay()))

MySQL上だとこんな感じ

MySQLでsysdate()が複数選択された曜日か判定.sql
set @holiday := 7;  // 1:日曜日、2:月曜日、4:火曜日が複数選択された想定。
select @holiday & (dayofweek(sysdate()) - 1);  // 0なら複数選択外。0以外なら複数選択内。

色々書いてみたけど結局ビット演算の使用例でしかないのかなこれ。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?