質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1068閲覧

javascriptでの時間取得について<初心者>

runner

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2018/11/01 01:46

前提・実現したいこと

指定日が残り1日未満の時間になれば、"残り1日を切っています"と表示したい。

該当のソースコード

javascript

ソースコード
var gettitle=document.getElementsByClassName("fi-title");//タイトル設定のクラス取得
FiTitle = gettitle[0].innerHTML;//課題のタイトル取得

var getdate=document.getElementsByClassName("small-detail-info");//期限設定のクラス取得
var object=getdate[3].outerHTML;//提出期限設定のクラス取得

//開始日と終了日がそれぞれ二桁の時間だと仮定しそれぞれの文字列を取得する
//object1の中身の例:2018/10/05 13:00 
//object2の中身の例:2018/10/10 23:30
var object1=object.substr(399,16);//開始日
var object2=object.substr(488,16);//終了日

var date_start=object1.indexOf('<');//(この文字(<)がなければ―1が返ってくる)
var date_end=object2.indexOf('</');
var date_end2=object2.indexOf('<');

var deadline=object.indexOf('style="display: block;"');//提出期限がすぎている場合はこの文字列がある。
var task=object.indexOf('data-end="null"');//レポートタスク以外の場合期限設定がnullになっている

var getdate_end;

var flag=0;

var getsubject=document.getElementsByClassName("course-name-text-header-mvc");//教科タイトル設定クラスの取得
var subject=getsubject[1].innerHTML;//教科タイトルの取得

var getdescription=document.getElementsByClassName("description-text");//説明設定クラスの取得
var description=getdescription[0].innerHTML //課題説明の取得

if(FiTitle && object && task !== -1){//タスクチェック(レポートタスクか)
alert("レポートタスクかお確かめください");
}else if(deadline !== -1){//期限チェック
alert("この課題は提出期間が終了しています");
}else if(date_start !== -1 && date_end !== -1){//開始日の時間と終了日の時間が一桁の場合、それぞれ一文字ずつ取得した文字がずれ、開始日の最後に < が終了日の最後に </ がつく
//2018/10/05 8:00< ← こうなる(開始日の日付は一例)
//018/10/10 8:00</ ← こうなる(終了日の日付は一例)

//提出期限を知らせるため開始日は入れず、終了日のみ取得する getdate_end=object.substr(487,4)+'-'+object.substr(492,2)+'-'+object.substr(495,2)+'T'+'0'+ object.substr(498,1)+':'+object.substr(500,2)+':00';//提出終了日取得および文字列の調整 flag++;

}else if(date_start == -1 && date_end2 !== -1){//終了日の時間が一桁の場合最後に < がつく

getdate_end=object.substr(488,4)+'-'+object.substr(493,2)+'-'+object.substr(496,2)+'T'+'0'+ object.substr(499,1)+':'+object.substr(501,2)+':00';//提出終了日取得および文字列の調整 flag++;

}else if(date_start !== -1 && date_end2 !== -1){//開始日の時間が一桁で終了日の時間が二桁の場合  最後に < がつく(両方)

getdate_end=object.substr(487,4)+'-'+object.substr(492,2)+'-'+object.substr(495,2)+'T'+ object.substr(498,2)+':'+object.substr(501,2)+':00';//提出終了日取得および文字列の調整 flag++;

}else{//開始日の時間が二桁で終了日の時間が二桁の場合

getdate_end=object.substr(488,4)+'-'+object.substr(493,2)+'-'+object.substr(496,2)+'T'+ object.substr(499,2)+':'+object.substr(502,2)+':00';//提出終了日取得および文字列の調整 flag++;

}
if(flag == 1){//開始日と終了日が取得できたときだけGooglecalendarのタブを開く
var url = (function(){
var getUTC = function(date_str){
var date = new Date(date_str);
return date.getUTCFullYear() +
zerofill(date.getUTCMonth()+1) +
zerofill(date.getUTCDate()) +
'T' +
zerofill(date.getUTCHours()) +
zerofill(date.getUTCMinutes()) +
zerofill(date.getUTCSeconds()) +
'Z';
};

var zerofill = function(num){
return ('0'+num).slice(-2);
}

return 'http://www.google.com/calendar/event?' +
'action=' + 'TEMPLATE' +
'&text=' + encodeURIComponent(FiTitle) +
'&details=' + encodeURIComponent(description) +
'&location='+ encodeURIComponent(subject) +
'&dates=' + getUTC(getdate_end) + '/' + getUTC(getdate_end) +
'&trp=' + 'false' +
'&sprop=' + encodeURIComponent('リンク設置元のURL') +
'&sprop=' + 'name:' + encodeURIComponent('リンク設置元のサービス名');

})();
window.open(url);
}

補足情報(FW/ツールのバージョンなど)

プログラミング初心者のため右も左もわからない状態です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/11/01 02:00

「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
dice142

2018/11/01 02:04

コードはコードブロック(```)で囲んでください。また、現状どうなっているのかも詳しく記載してください。
退会済みユーザー

退会済みユーザー

2018/11/01 02:27 編集

(1) もっとざっくりと処理を区切ってください、大処理、中処理とかそういうレベル感で。例えば、関数を作るとか。そしてそのレベルでのコメントを付けてほしい。全部コード読めばわかりますみたいなのめんどうです。 (2) そもそも、質問された内容、問題の核心となる事柄と関係ない諸々のコードが入ってますよね。わからない部分はわからない部分だけについて、一度別のファイルで取り組まれるのがよいです。問題がごっちゃになったりします。
jun68ykt

2018/11/01 02:33 編集

こんにちは。runnerさんの問題解決になる回答をするために、以下を確認させてください。次のような関数、remainingDaysUntil() のコードを回答することは、お求めになっている回答になりますか? たとえば、remainingDaysUntil("2018/12/24”) とすると、現在日時から 2018/12/24 0時0分0秒 までの間の時間を、日数換算にして、小数ありの数値で返します。 たとえば現在日時が 2018年12月23日の正午、12:00 頃に remainingDaysUntil("2018/12/24”) は、あと約12時間後なので、だいたい 0.5 に近い小数を返します。このような関数を作ると、指定日まで1日を切っている判定は if ( remainingDaysUntil(何らかの指定日) < 1.0 ) と書けます。 このような関数remainingDaysUntil()のコードを回答すれば、とりあえず当面の問題は解決して前に進みそうですか?
m.ts10806

2018/11/01 04:36

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。
jun68ykt

2018/11/03 21:10

runnerさんへ。こちらのご質問は、次の質問 https://teratail.com/questions/155914 に引き継がれたと思いますので、こちらのほうは、回答くださった回答者さんの回答へコメントを返答した後、ベストアンサーにすることにより解決済みにすることをお勧めします。
guest

回答1

0

JavaScriptなので
https://github.com/iamkun/dayjs
やら
https://momentjs.com/
使うのも手です

投稿2018/11/01 03:21

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問