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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1020閲覧

ERROR missing ) after argument list...助けて

GPE46232209

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2021/06/24 10:14

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="uft8"> <title>time</title> <?php try { $db = new PDO('mysql:dbname=bulletinboard;host=127.0.0.1;charset=utf8','root', '' ); } catch (PDOException $e) { echo "データベース接続エラー :".$e->getMessage(); } $records = $db->query('SELECT * FROM chat WHERE id=6 '); $record = $records->fetch(); $day=0; $hour=0; //簡易タイマーPHP(指定した日時~日時までの期間だけ表示します) //設置するページの拡張子は必ず.phpとなっている必要があります。 //表示開始日時(この日時になったら表示されます) //※日時のフォーマットは必ず「2021-05-17 08:00:00」のようにしてください。 $startDate = $record['modified']; $datetime = date($startDate); list($year, $month, $day, $hour, $minute, $second) = preg_split('/[-: ]/', $datetime); function time_change($hour, $day, $month, $year) { if ($hour>24) { $hour-= 24; $day += 1; switch ($day>=28) { case $month= 1:{ if ($day>31) { $day-= 31; $month+= 1; }} break; case $month =2:{ if ($day>28) { $day-= 28; $month+= 1; }} break; case $month=3: case $month=5: case $month=7: case $month=8: case $month=10:{ if ($day>31) { $day-= 31; $month+= 1; }} break; case $month=4: { if ($day>30) { $day-= 30; $month+= 1; }} break; case $month=6:{ if ($day>30) { $day-= 30; $month+= 1; }} break; case $month=9:{ if ($day>30) { $day-= 30; $month+= 1; }} break; case $month=11: { if ($day>30) { $day-= 30; $month+= 1; }} break; case $month=12: { if ($day>31) { $day-= 31; $month-= 11; $year+=1; }} break; default: break; } } }; if($record['time_limit'] == '2hours'){$hours= 02; $hour+= $hours; time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '6hours'){$hours = 06; $hour+= $hours; time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '1day'){$days = 01; $day += $days;time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '3day'){$days = 03; $day += $days;time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '5day'){$days = 05; $day += $days;time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '1week'){$days = 07; $day += $days;time_change($hour, $day, $month, $year);} elseif($record['time_limit'] == '2week'){$days = 14; $day += $days; time_change($hour, $day, $month, $year);} date_default_timezone_set('Asia/Tokyo');//タイムゾーン (日本以外の場合には適宜設定ください) //表示終了日時(この日時になったら非表示になります) //※日時のフォーマットは必ず「2021-05-17 08:00:00」のようにしてください。 $setdate = ("$year-$month-$day $hour:$minute:$second"); $endDate=date($setdate); //var diff2dates のデータ型を数値にして返すそのための if(date('Y-m-d H:i:s') >= $startDate && date('Y-m-d H:i:s') < $endDate){ ?> <script type="text/javascript"> function showCountdown() { var targetdate =new Date(<?php echo $year?>, <?php echo $month?>, <?php echo $day?>, <?php echo $hour?>, <?php echo $minute?>, <?php echo $second?>); var dnumTarget =targetdate.getTime(); var nowdate = new Date(<?php echo $datetime;?>);//Uncaught SyntaxError: missing ) after argument list var dnumNow = nowdate.getTime(); //diff2Datesをミリ秒の直して表記させる var diff2Dates = dnumTarget - dnumNow; if( dnumTarget < dnumNow ) { // 期限が過ぎた場合は -1 を掛けて正の値に変換 diff2Dates *= -1; } var msg1 = "期限の<?php echo $endDate?>"; // 差の秒を、日数・時間・分・秒に分割 var dDays = diff2Dates / ( 1000 * 60 * 60 * 24 ); // 日数 diff2Dates = diff2Dates % ( 1000 * 60 * 60 * 24 ); var dHour = diff2Dates / ( 1000 * 60 * 60 ); // 時間 diff2Dates = diff2Dates % ( 1000 * 60 * 60 ); var dMin = diff2Dates / ( 1000 * 60 ); // 分 diff2Dates = diff2Dates % ( 1000 * 60 ); var dSec = diff2Dates / 1000; // 秒 var msg2 = Math.floor(dDays) + "日" + Math.floor(dHour) + "時間" + Math.floor(dMin) + "分" + Math.floor(dSec) + "秒"; // 表示文字列の作成 var msg; if( dnumTarget > dnumNow ) { // まだ期限が来ていない場合 msg = msg1 + "までは、あと" + msg2 + "です。"; } else { // 期限が過ぎた場合 msg = msg1 + "は、既に" + msg2 + "前に過ぎました。"; } // 作成した文字列を表示    document.getElementById("RealtimeCountdownArea").innerHTML = msg; } // 1秒ごとに実行 window.onload =showCountdown; setInterval('showCountdown',1000); </script> <?php } ?> </head> <body> <input type=button onclick="showCountdown();" > <p id="RealtimeCountdownArea">This note is written !</p> <p></p> </body> </html>

前提・実現したいこと

データベースからtimestampと日時指定された文字を取り出して関数通して
カウントダウンをJSで行うこと

発生している問題・エラーメッセージ

time.php:11 Uncaught SyntaxError: missing ) after argument list``` function showCountdown() の中にある var nowdate = new Date(<?php echo $datetime;?>);という表記でエラーが発生。 この括弧があるのにない表記を直したいです。

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

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

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

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

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

mike2mike4

2021/06/24 10:30

$datetime;の;で文が終わったと解釈されているのでは?
GPE46232209

2021/06/24 13:59

回答ありがとうございます。$datetime;と$datetimeの場合で試したのですが、相変わらずエラーがなっています。
guest

回答1

0

ベストアンサー

まずコードインデントはしっかりつけましょう。

以下はEclipseというプログラミングでは様々な言語でよく採用されるIDEのフォーマット機能を利用した結果です。

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="uft8"> 5<title>time</title> 6<?php 7try { 8 $db = new PDO('mysql:dbname=bulletinboard;host=127.0.0.1;charset=utf8', 'root', ''); 9} catch (PDOException $e) { 10 echo "データベース接続エラー :" . $e->getMessage(); 11} 12$records = $db->query('SELECT * FROM chat WHERE id=6 '); 13$record = $records->fetch(); 14$day = 0; 15$hour = 0; 16// 簡易タイマーPHP(指定した日時~日時までの期間だけ表示します) 17// 設置するページの拡張子は必ず.phpとなっている必要があります。 18// 表示開始日時(この日時になったら表示されます) 19// ※日時のフォーマットは必ず「2021-05-17 08:00:00」のようにしてください。 20$startDate = $record['modified']; 21$datetime = date($startDate); 22 23list ($year, $month, $day, $hour, $minute, $second) = preg_split('/[-: ]/', $datetime); 24 25function time_change($hour, $day, $month, $year) 26{ 27 if ($hour > 24) { 28 $hour -= 24; 29 $day += 1; 30 switch ($day >= 28) { 31 case $month = 1: 32 { 33 if ($day > 31) { 34 $day -= 31; 35 $month += 1; 36 } 37 } 38 break; 39 case $month = 2: 40 { 41 if ($day > 28) { 42 $day -= 28; 43 $month += 1; 44 } 45 } 46 break; 47 case $month = 3: 48 case $month = 5: 49 case $month = 7: 50 case $month = 8: 51 case $month = 10: 52 { 53 if ($day > 31) { 54 $day -= 31; 55 $month += 1; 56 } 57 } 58 break; 59 case $month = 4: 60 { 61 if ($day > 30) { 62 $day -= 30; 63 $month += 1; 64 } 65 } 66 break; 67 case $month = 6: 68 { 69 if ($day > 30) { 70 $day -= 30; 71 $month += 1; 72 } 73 } 74 break; 75 case $month = 9: 76 { 77 if ($day > 30) { 78 $day -= 30; 79 $month += 1; 80 } 81 } 82 break; 83 case $month = 11: 84 { 85 if ($day > 30) { 86 $day -= 30; 87 $month += 1; 88 } 89 } 90 break; 91 case $month = 12: 92 { 93 if ($day > 31) { 94 $day -= 31; 95 $month -= 11; 96 $year += 1; 97 } 98 } 99 break; 100 default: 101 break; 102 } 103 } 104} 105; 106if ($record['time_limit'] == '2hours') { 107 $hours = 02; 108 $hour += $hours; 109 time_change($hour, $day, $month, $year); 110} elseif ($record['time_limit'] == '6hours') { 111 $hours = 06; 112 $hour += $hours; 113 time_change($hour, $day, $month, $year); 114} elseif ($record['time_limit'] == '1day') { 115 $days = 01; 116 $day += $days; 117 time_change($hour, $day, $month, $year); 118} elseif ($record['time_limit'] == '3day') { 119 $days = 03; 120 $day += $days; 121 time_change($hour, $day, $month, $year); 122} elseif ($record['time_limit'] == '5day') { 123 $days = 05; 124 $day += $days; 125 time_change($hour, $day, $month, $year); 126} elseif ($record['time_limit'] == '1week') { 127 $days = 07; 128 $day += $days; 129 time_change($hour, $day, $month, $year); 130} elseif ($record['time_limit'] == '2week') { 131 $days = 14; 132 $day += $days; 133 time_change($hour, $day, $month, $year); 134} 135date_default_timezone_set('Asia/Tokyo'); // タイムゾーン (日本以外の場合には適宜設定ください) 136 137// 表示終了日時(この日時になったら非表示になります) 138// ※日時のフォーマットは必ず「2021-05-17 08:00:00」のようにしてください。 139$setdate = ("$year-$month-$day $hour:$minute:$second"); 140$endDate = date($setdate); 141// var diff2dates のデータ型を数値にして返すそのための 142if (date('Y-m-d H:i:s') >= $startDate && date('Y-m-d H:i:s') < $endDate) { 143 ?> 144 145<script type="text/javascript"> 146function showCountdown() { 147 var targetdate =new Date(<?php echo $year?>, <?php echo $month?>, <?php echo $day?>, <?php echo $hour?>, <?php echo $minute?>, <?php echo $second?>); 148 var dnumTarget =targetdate.getTime(); 149var nowdate = new Date(<?php echo $datetime;?>);//Uncaught SyntaxError: missing ) after argument list 150 var dnumNow = nowdate.getTime(); 151 //diff2Datesをミリ秒の直して表記させる 152 var diff2Dates = dnumTarget - dnumNow; 153 if( dnumTarget < dnumNow ) { 154 // 期限が過ぎた場合は -1 を掛けて正の値に変換 155 diff2Dates *= -1; 156 } 157 var msg1 = "期限の<?php echo $endDate?>"; 158 // 差の秒を、日数・時間・分・秒に分割 159 var dDays = diff2Dates / ( 1000 * 60 * 60 * 24 ); // 日数 160 diff2Dates = diff2Dates % ( 1000 * 60 * 60 * 24 ); 161 var dHour = diff2Dates / ( 1000 * 60 * 60 ); // 時間 162 diff2Dates = diff2Dates % ( 1000 * 60 * 60 ); 163 var dMin = diff2Dates / ( 1000 * 60 ); // 分 164 diff2Dates = diff2Dates % ( 1000 * 60 ); 165 var dSec = diff2Dates / 1000; // 秒 166 var msg2 = Math.floor(dDays) + "日" 167 + Math.floor(dHour) + "時間" 168 + Math.floor(dMin) + "分" 169 + Math.floor(dSec) + "秒"; 170 // 表示文字列の作成 171 var msg; 172 if( dnumTarget > dnumNow ) { 173 // まだ期限が来ていない場合 174 msg = msg1 + "までは、あと" + msg2 + "です。"; 175 } 176 else { 177 // 期限が過ぎた場合 178 msg = msg1 + "は、既に" + msg2 + "前に過ぎました。"; 179 } 180 // 作成した文字列を表示 181 document.getElementById("RealtimeCountdownArea").innerHTML = msg; 182} 183// 1秒ごとに実行 184window.onload =showCountdown; 185setInterval('showCountdown',1000); 186</script> 187<?php } ?> 188</head> 189<body> 190 191 <input type=button onclick="showCountdown();"> 192 <p id="RealtimeCountdownArea">This note is written !</p> 193 <p></p> 194</body> 195</html>

これで多少は見やすくなったかと思います。

var nowdate = new Date(<?php echo $datetime;?>);/

Date()で任意の日付でオブジェクト生成したい場合は「日付として解釈できる文字列」を渡す必要があります。

画面表示してブラウザ「ソースを表示」してみると、文字列になっているかどうかわかると思います。

おそらく

//※日時のフォーマットは必ず「2021-05-17 08:00:00」のようにしてください。

とコメントにある通り
var nowdate = new Date(2021-05-17 08:00:00);

のようになっていると思います。
これでは文字列として認識されません。
クォートつけて文字列にしましょう。

投稿2021/06/24 10:51

m.ts10806

総合スコア80850

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

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

GPE46232209

2021/06/24 14:01

ご回答ありがとうございます。ご指摘いただいた通り、Dateメソッドが文字列として認識しておらず、動作することができていない状態でしたクォートをつけて文字列にしたところ、作動しました。ありがとうございます。
m.ts10806

2021/06/24 19:41

>Dateメソッドが文字列として認識しておらず あの、細かくて申し訳ないですが、「文字列として認識しないコード」を書いたのはご自身なので、そこは認識されますよう。 PHPが行っているのはあくまで「そういう文字の出力」です。 HTMLやJavaScriptとして正しく認識させるように書くのは実装者の役割です。 ブラウザに表示させた際に「ソースを表示」で確認するのを忘れないようにしてくださいね。 ※いきなりPHPから書くのではなく、静的HTML(モック)を作ってから動的部分のみ書き換えるようにするのがミスを減らせます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問