日別アーカイブ: 2020-08-13

今日のノルマ

繰り返す行動

人間の行動は繰り返し行動が大半を占めています。中でも7日ごとに繰り返されるものが多いです。欧米の六日働いて最後を休息日に充てたのは宗教的な意味合いがあり、江戸時代の四勤一休、三勤一休は5日~4日ごとに繰り返される働き方です。

自動的に判断する方法

7日ごとに決まった行動をするには曜日を判断基準にすれば考えやすいです。5日おき6日おきに決まりきったことをするにはカレンダーに印をつけておくと忘れにくいでしょう。

スマホやパソコンが身近にある今日、元日からの経過日を判断基準にすると明快です。基準日から当日までの経過日を算出する関数として、EXCELではDATEDIFがあります。HTMLでは以下のようにプログラミングすることができます。darkmagentaで示した値が元日からの経過日です。元日が0、平年の12月31日が364になります。

サンプルコード

<body onload="start();">
<DIV style="float:left; font-weight:bold; border:1px green solid;">
<div id="ym" style="width:150px; height:40px;  font-size:24px; border:0px red solid;"></div>
<div id="dy" style="width:125px; height:120px; font-size:72px; text-align:center; vertical-align:middle; display:table-cell;"></div>
<div id="s6" style="width:150px; height:80px;  font-size:24px; border:0px blue solid;"></div>
</DIV>
<div style="clear:both; width:240px; height:20px; border:0px red solid;"></div>
<script type="text/javascript" charset="UTF-8">
var now, year, mon, day, you, i, x, y;
var youbi = ["日","月","火","水","木","金","土"];								//曜日の選択肢

function start(){
	var month = [0, 31, 59, 90, 120, 151, 181, 212, 243, 274, 304, 334];		//通算日算出表
	var now = new Date(/*"2019-03-01"*/);										//日付と時間の設定
	var year = now.getYear();													//1900年からの経過年数
	var mon = now.getMonth();													//今日の月(0~11)
	var day = now.getDate();													//今日の日(1~31)
	var you = now.getDay();														//今日の曜日
	if ((year%4 == 0 && year%100 != 0) || (year%400 == 0)){						//グレゴリオ暦のうるう年か
		for(var j=2; j<12; ++j)	month[j]++;										//うるう年だから通算日算出表を修正
	}
	var ym = (1900+year)+"年"+letter2(mon+1)+"月";								//0~11 => 1~12
	var s6 = youbi[you]+"曜日"+"&nbsp;<span style='color:mediumvioletred;'>"+(month[mon]+day-1)+"</span>";
	document.getElementById("ym").innerHTML = ym;								//年月
	document.getElementById("dy").innerHTML = day;								//日
	document.getElementById("s6").innerHTML = s6+"<BR><span style='color:darkmagenta;'>"+browserName()+"</span>";	//ブラウザの表示
}
function letter2(num) {return ('00' + num ).slice(-2);} <!-- '01' を返す -->
//	               -1         0         1         2        3          4
const BrowsN = ["unknown", "chrome", "safari", "opera", "firefox", "edge"];
function browserName(){
var b = getBrowser() + 1;							//-1 ~ 4 ==> 0 ~ 5
return BrowsN[b];
}
function getBrowser(){								// -1 ~ 4
var userAgent = window.navigator.userAgent.toLowerCase();
if(userAgent.indexOf('firefox/') != -1)	return 3;	// firefox
if(userAgent.indexOf('opr/') != -1)		return 2;	// opera
if(userAgent.indexOf('edg/') != -1)		return 4;	// edge
if(userAgent.indexOf('chrome/') != -1)	return 0;	// chrome
if(userAgent.indexOf('safari/') != -1)	return 1;	// safari
return -1;									//-1	// unknown
}
</script>
</body>

使い方

例えば、1日おきに洗髪するのであれば、経過日が偶数、奇数かで決められます。10日ごとに決まりきった行動をする場合は、経過日 % 10 の計算値を基準にします。いまどき、五十日(ごとうび)ではあまりにも大雑把と言えましょう。

表示例

おまけ

動作しているブラウザ名を特定する関数(getBrowser)をおまけとして載せます。userAgentの文字列を検索する順序が肝です。