kintone 日時項目への日付・時刻の設定 ②

いつもお世話になっております。

先日、【kintone 日時項目への日付・時刻の設定】にて質問させていただきました、

arakakiです。

 

今回は上記を進めていくにあたって、日時項目への1時間毎の時刻変換・設定は出来ましたが

取り込み元の時刻項目に分指定がある場合の、(例:2:30など)

反映方法が分らず苦戦しています。

(案の定引っかかりました。)

 

現行では以下ロジックにて時刻項目⇒日時項目への設定を行っています。

 

//utc時間が設定されるため、時間の変換
var time = event.record[‘時刻項目’].value;
time = parseInt(time);
var utctime = “”;
var utctimeE = “”;
var utctimeb = “”;
var utctimeEb = “”;

if( time < 9 ) {
utctime = time + 15 ;
//utc時間だと1日先日付となるため、1日マイナスする
var datetime = moment().subtract(1, ‘day’).format(‘YYYY-MM-DD’);
//終了時間のセット
if ( time == 8 ) {
utctimeEb = time - 8 ;
var datetimeE = moment().format(‘YYYY-MM-DD’);
//時間が10未満だと1桁表示となり、設定できないため2桁にする
utctimeE = “0” + String(utctimeEb);
}
else {
utctimeE = time + 16;
datetimeE = datetime
}
}
else {
utctimeb = time - 9 ;
//utc時間でも日付は変わらないためそのまま
datetime = moment().format(‘YYYY-MM-DD’);
if ( utctimeb < 10 ) {
//時間が10未満だと1桁表示となり、設定できないため2桁にする
utctime = “0” + String(utctimeb);
}
else {
//時間が二けたの場合は問題なし
utctime = utctimeb;
}
//終了時間設定
utctimeEb = time - 8;
datetimeE = moment().format(‘YYYY-MM-DD’);
if ( utctimeEb < 10 ) {
//時間が10未満だと1桁表示となり、設定できないため2桁にする
utctimeE = “0” + String(utctimeEb);
}
else {
utctimeE = utctimeEb;
}
}
//登録内容セット
event.record[‘開始日時’].value = datetime + “T” + String(utctime) + “:00:00Z”;
event.record[‘終了日時’].value = datetimeE + “T” + String(utctimeE) + “:00:00Z”;

 

上記を改善し、分刻み分までの反映は可能でしょうか。

いつもお手数をおかけしていますが、知っていらっしゃる方がいましたら

教えていただけると助かります。

よろしくお願いいたします。

 

arakaki さん

 

日時の文字列による面倒な処理が苦しい感じになっていますので、最初に Moment.js の形式にしてしまう方が処理しやすそうかなぁと思いました。

 

var time = event.record['時刻項目'].value;
var m_datetime = moment().hours(time.split(':')[0]).minutes(time.split(':')[1]).seconds('00');

 

Moment.js は日時処理でやりたい思ったことは大体出来るというくらい優秀なライブラリなので、ドキュメント を都度確認されることをオススメします。ドキュメントは分量がありますが、これがまさに色々出来ることを物語っていると思います

 

Ryu Yamashita さん

 

コメント頂きありがとうございます。

時刻項目についてMoment.jsに変換してできるか確認します。

ご指南ありがとうございます。

 

 

 

arakaki さん

moment.js は、UTC をそのまま扱うことができます。
UTCの時刻を指定すると、こんな感じになると思います。

// 本日日付+時刻(UTC)
var datetime = moment().utc().format('YYYY-MM-DD') + ' ' + event.record['時刻']['value'];
// 本日日付+時刻(UTC)をISOフォーマット変換
event.record['日時']['value'] = moment.utc(datetime).toISOString();
console.log(event.record['日時']['value']);

// 参考:本日日付(UTC)
console.log(moment().utc().format('YYYY-MM-DD HH:mm'));

rex0220 さん

 

コメントありがとうございます。

教えて頂いたロジックを元に、以下で日時項目へ設定を行うことができました。

大変助かりました、ありがとうございます。

var datetime = moment().format(‘YYYY-MM-DD’) + ’ ’ + event.record[‘時刻’][‘value’];
// 本日日付をISOフォーマット変換
event.record[‘日時’][‘value’] = moment(datetime).toISOString();
console.log(event.record[‘日時’][‘value’]);

 

次は上記日時に1時間追加した日時を、予定終了日時として設定する(上記は予定開始日時)

設定を考えます。

arakaki さん

前回と同様、日本時間を設定でしたか?
1時間追加は、下記でOKです。

event.record[‘日時’][‘value’] = moment(datetime).add(1, ‘h’).toISOString();

rex0220 さん

 

コメントありがとうございます。

参照元の時刻項目は日本時間になります。 

1時間追加もご指南頂いた通りの設定でうまくいきました。

 

ちゃんと時間が変換されていることと、長いロジックがかなり短くなって感激です。

ありがとうございました!