日時のn秒後であるかチェックする

デモ


	function test1(){
		
		// 現在日時が「2017-10-23 11:55:00」の30秒後であるかチェックする
		var flg = checkAfterSeconds('2017-10-23 11:55:00',30);
		$('#res1').append(flg + '<br>');
	
	}
	
	/**
	 * 現在日時が指定日時のn秒後であるかチェックする
	 * 
	 * @note
	 * 文字列型日付、日付オブジェクトの両方に対応
	 * 
	 * @param d1 指定日時
	 * @param n n秒後
	 * @returns 結果 0:n秒前  ,  1:n秒後
	 * 
	 */
	function checkAfterSeconds(d1,n){
		
		// 引数が文字列型の日付なら日付オブジェクトに変換
		if(typeof d1 == "string"){
			
			if(d1.indexOf('-') > -1){
				d1 = d1.replace('-','/');// IEは「-」の区分に対応していないので「/」に置換
			}
			d1 = new Date(d1);
		}
		var d_u = Math.floor(d1);
		
		var now_u =  Math.floor(new Date());
	
		if(now_u > d_u + n * 1000){
			return 1;
		}else{
			return 0;
		}
	
	}
	

日付から年、月、日をそれぞれ取得する


	var date1 = new Date(); 
	var year = date1.getFullYear(); //年
	var month = date1.getMonth(); //月
	var day = date1.getDate(); //日
	

日付から曜日を取得

デモ


	var dateObj = new Date('2018-12-31');
	var w_day = dateObj.getDay(); // 0~6(日~土)
	

日付の加算と減算

デモ

加算

	var date1 = new Date('2018-11-30');
	date1.setDate(date1.getDate() + 2); // → 2018-12-2
	

減算

	var date1 = new Date('2018-11-30');
	date1.setDate(date1.getDate() - 2); // → 2018-11-28
	


参考:【JavaScript入門】日付の加算・減算方法まとめ(月またぎ/うるう年)

日付フォーマット

Demo

/**
 * 日付フォーマット変換
 * @param mixed date1 日付
 * @param string format フォーマット Y-m-d, Y/m/d h:i:s など
 * @returns string 「yyyy-mm-dd」形式の日付文字列
 */
function dateFormat(date1, format){
	
	if(date1 == null) date1 = new Date().toLocaleString();
	if(format == null) format = 'Y-m-d';
	
	// 引数が文字列型であれば日付型に変換する
	if((typeof date1) == 'string'){
		date1 = new Date(date1);
		if(date1 == 'Invalid Date'){
			return null;
		}
	}
	
	var year = date1.getFullYear();
	
	var month = date1.getMonth() + 1;
	month = ("0" + month).slice(-2); // 2桁の文字列に変換する
	
	var day = date1.getDate();
	day = ("0" + day).slice(-2);
	
	var houre = date1.getHours();
	houre = ("0" + houre).slice(-2);
	
	var minute = date1.getMinutes();
	minute = ("0" + minute).slice(-2);
	
	var second = date1.getSeconds();
	second = ("0" + second).slice(-2); // 2桁の文字列に変換する
	
	var date_str = format;
	date_str = date_str.replace('Y', year);
	date_str = date_str.replace('m', month);
	date_str = date_str.replace('d', day);
	date_str = date_str.replace('h', houre);
	date_str = date_str.replace('i', minute);
	date_str = date_str.replace('s', second);
	
	//var date_str = year + '-' + month + '-' + day;
	return date_str;
}
	

出力

変換前フォーマット変換後
nullY-m-d2019-07-14
1990-1-1Y-m-d1990-01-01
2019-1-1Y-m-d2019-01-01
2019/1/1Y-m-d2019-01-01
2019/1/12Y-m-d2019-01-12
2019-1-31Y-m-d2019-01-31
2019-2-29Y-m-d2019-03-01
2019-8-32Y-m-dnull
2019-10-10 1:2:3Y/m/d h:i:s2019/10/10 01:02:03
2019-12-31Y-m-d2019-12-31
2050-12-31Y-m-d2050-12-31
1990-1-1 1:2:3Y-m-d h:i:s1990-01-01 01:02:03
2019-7-14 12:13:14Y-m-d h:i:s2019-07-14 12:13:14
2019-7-14 12:13Y-m-d h:i:s2019-07-14 12:13:00
2019-7-14 12Y-m-d h:i:snull
2019-7-14Y-m-d h:i:s2019-07-14 00:00:00
2019-7Y-m-d h:i:s2019-07-01 00:00:00
2019Y-m-d h:i:s2019-01-01 09:00:00
AAAY-m-dnull

旧式


	/**
	 * 日付オブジェクトを「y-m-d」形式の日付書式に変換する
	 * @param Date date1 日付オブジェクト
	 * @returns string 「y-m-d」形式の日付文字列
	 */
	function convDateToYMD(date1){
	
		// 引数が文字列型であれば日付型に変換する
		if((typeof date1) == 'string'){
			date1 = new Date(date1);
			if(date1 == 'Invalid Date'){
				return null;
			}
		}
	
		var year = date1.getFullYear();
		var month = date1.getMonth() + 1;
		var day = date1.getDate();
		var date_str = year + '-' + month + '-' + day;
		return date_str;
	}
	

日付フォーマット【yyyy-mm-dd形式】


	/**
	 * 日付の書式を「yyyy-mm-dd」形式に変換する
	 * @param mixed date1 日付
	 * @returns string 「yyyy-mm-dd」形式の日付文字列
	 */
	function convDateTo_yyyymmdd(date1){
		
		// 引数が文字列型であれば日付型に変換する
		if((typeof date1) == 'string'){
			date1 = new Date(date1);
			if(date1 == 'Invalid Date'){
				return null;
			}
		}
		
		var year = date1.getFullYear();
		var month = date1.getMonth() + 1;
		month = ("0" + month).slice(-2); // 2桁の文字列に変換する
		var day = date1.getDate();
		day = ("0" + day).slice(-2);
		var date_str = year + '-' + month + '-' + day;
		return date_str;
	}
	
検証
beforeafter
1990-1-11990-01-01
2019-1-12019-01-01
2019/1/12019-01-01
2019/1/122019-01-12
2019-1-312019-01-31
2019-2-292019-03-01
2019-8-32null
2019-10-10 1:2:32019-10-10
2019-12-312019-12-31
2050-12-312050-12-31
AAAnull


月初日を取得


	/**
	 * 対象日付の月初日を取得
	 * @param mixed date1 対象日付
	 * @return string 対象日付の月初日
	 */
	_getMonthStartDate(date1){
		if(date1 == null) return null;
		if((typeof date1) == 'string'){
			date1 = new Date(date1);
		}
		
		var year = date1.getFullYear();
		var month = date1.getMonth() + 1;
		var date_str = year + '-' + month + '-1';
		return date_str;
	}
	

月末日を取得


	/**
	 * 対象日付の月末日を取得する
	 * @param mixed date1 対象日付
	 * @return string 月末日(yyyy-mm-dd)
	 */
	_getMonthEndDate(date1){
		if(date1 == null) return null;
		if((typeof date1) == 'string'){
			date1 = new Date(date1);
		}

		// 月末日の算出
		var mEndDate = new Date(date1.getFullYear(), date1.getMonth() + 1, 0);
		
		var year = mEndDate.getFullYear();
		var month = mEndDate.getMonth() + 1;
		var day = mEndDate.getDate();
		
		// 2桁にそろえる。 例 3→03
		var month = ("0"+month).slice(-2);
		var day = ("0"+day).slice(-2);
		
		var date_str = year + '-' + month + '-' + day;
		
		return date_str;

	}
	

日付の引き算(日付の差分を求める)

デモ


	/**
	 * 日付の引き算(日付の差分を求める)
	 * @note
	 * 日時形式も受け付けるが、時刻部分は無視される。
	 * @param mixed date1 対象日付1
	 * @param mixed date2 対象日付2
	 * @return int 差分日数
	 */
	function _subtractionDate(date1, date2) {
	
		if(date1 == null || date1 == '') return null;
		if(date2 == null || date2 == '') return null;
		
		// 文字列型日付なら日付オブジェクトに変換する
		if((typeof date1) == 'string') date1 = new Date(date1);
		if((typeof date2) == 'string') date2 = new Date(date2);
	
		// 差分をミリ秒で求める
		var diff_ms =  date1.getTime() - date2.getTime();
	 
		// 日数差分をミリ秒差分から算出
		var diff_day = Math.floor(diff_ms / (1000 * 60 * 60 * 24)) + 1;
	 
		return diff_day;
	}
	

日付をyyyy-mm-dd型に変換する


	/**
	 * yyyy-mm--dd型に変換する
	 * 
	 * @note
	 * 例) 2012-2-3 → 2012-02-03
	 * 例) 2012-12-12 → 2012-12-12
	 * 
	 * @param string date_str 日付文字列
	 * @param string delim 区切り文字(デフォルトはハイフン)
	 * @return yyyy-mm-dd型の日付文字列
	 */
	_yyyymmdd(date_str, delim){
		if(date_str == null) return date_str;
		date_str = date_str.trim();
		if(date_str == '' || date_str == 0) return date_str;
		if(delim == null) delim = '-';
		let ary = date_str.split(delim);
		if (ary.length != 3) return date_str;
		let month = ary[1];
		month = ("0"+month).slice(-2); // 2桁にそろえる。 例 3→03
		let day = ary[2];
		day = ("0"+day).slice(-2); // 2桁にそろえる。 例 3→03
		let date_str2 = ary[0] + delim + month + delim + day;
		return date_str2;
	}
	

年月をyyyy-mm型に変換する


	/**
	 * yyyy-mm型に変換する
	 * 
	 * @note
	 * 例) 2012-2 → 2012-02
	 * 例) 2012-12 → 2012-12
	 * 
	 * @param string ym 年月文字列
	 * @param string delim 区切り文字(デフォルトはハイフン)
	 * @return yyyy-mm型の年月文字列
	 */
	_yyyymm(ym, delim){
		if(ym == null) return ym;
		ym = ym.trim();
		if(ym == '' || ym == 0) return ym;
		if(delim == null) delim = '-';
		let ary = ym.split(delim);
		if (ary.length != 2) return ym;
		let month = ary[1];
		month = ("0"+month).slice(-2); // 2桁にそろえる。 例 3→03
		let ym2 = ary[0] + delim + month;
		return ym2;
	}
	

年月による日付範囲入力 | RangeYm.js

Demo

HTML

	<div id="kj_test_date" data-def="2012-2"></div>
	
JavaScript

	$(()=>{
		let rngYm = new RangeYm();
		rngYm.init({
			div_xid:'kj_test_date',
			field:'kj_test_date',
			wamei:'テスト日付',
		});
	});
	

年月による日付範囲入力【拡張】 | RangeYmEx.js

要素の属性にパラメータを指定するだけで日付範囲入力機能を追加する。

Demo

HTML

<div id="kj_test_date" class="range_ym_ex" data-wamei="テスト日付" data-def-ym="2012-2" data-def1="2010-5-15" data-def2="2010-5-18"></div>
<div id="kj_neko_date" class="range_ym_ex" data-wamei="ネコ日付" data-def-ym="2019-8" data-def2="2010-5-17" ></div>
<div id="kj_tanuki_date" class="range_ym_ex" data-wamei="狸日付" data-def-ym="2019-12"></div>
<div id="kj_lion_date" class="range_ym_ex" data-wamei="ライオン日付" ></div>
<div id="kj_toki_date" class="range_ym_ex" data-wamei="トキ日付"  data-def1="2010-5-5" data-def2="2010-5-18"></div>
JavaScript

	let rngYmEx = new RangeYmEx();
	rngYmEx.init();
	
RangeYmEx.js

/**
 * 年月による日付範囲入力【拡張】 | RangeYmEx.js
 * 
 * @note
 * RangeYm.jsが必要。
 * 
 * @date 2019-8-17
 * @license MIT
 * @version 1.0.0
 */
class RangeYmEx{
	
	/**
	 * 初期化
	 * 
	 */
	init(param){
		
		let boxs = {};
		
		jQuery('.range_ym_ex').each((i, elm)=>{
			elm = jQuery(elm);
			
			// 各種属性を取得
			let xid = elm.attr('id');
			let field=elm.attr('data-field');
			let wamei = elm.attr('data-wamei');
			if(field == null) field = xid;
			
			// 「年月による日付範囲入力」オブジェクト
			let rngYm = new RangeYm();
			rngYm.init({
				div_xid:elm,
				field:field,
				wamei:wamei,
			});

			let box = {
					elm:elm,
					field:field,
					wamei:wamei,
					rngYmObj:rngYm,
					};
			boxs[field] = box;
		});
		
		this.boxs = boxs;
	}

	
	
}