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

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

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

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

928閲覧

ブラウザによってエラーが出なかったり、出たりします。

kenichi_myk

総合スコア14

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

1グッド

0クリップ

投稿2019/11/19 03:24

編集2019/11/19 04:52

chormeで確認するとエラーが出ませんが、それ以外のブラウザで確認するとエラーが表示されています

Ajaxで月日を読み、phpでカレンダーを作成しています。

chromeではエラーが出ていないのですが、それ以外のブラウザでは以下のエラーが出ています。

Fatal error: Uncaught TypeError: DateTime::__construct() expects parameter 1 to be string, array given in C:\xampp\htdocs****.php on line 21

該当する箇所のソースは以下です。

php

1function funcIsAjax(){ 2 if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 3 return true; 4 return false; 5} 6 7if(funcIsAjax()) header("Content-type: text/plain; charset=UTF-8"); 8else{ 9 header("Location: {$base_url}"); exit; 10} 11 12date_default_timezone_set('Asia/Tokyo'); 13 14$today = $_POST; 15extract($today); 16 17$thisMonth = new DateTime($today); //21行目はここです。 18$dt = clone $thisMonth; 19$prev = $dt->modify('-1 month')->format('Y-m'); 20$dt = clone $thisMonth; 21$next = $dt->modify('+1 month')->format('Y-m'); 22 23$yearMonth = $thisMonth->format('Y F'); 24$month = $thisMonth->format('Y-m'); 25 26// カレンダー表示 27// 前月表示 28$tr = '<div class="cal_tr">'; 29$tail = null; 30//前月の最終日を習得 31$lastDayOfPrevMonth = new DateTime('last day of ' . $yearMonth . ' -1 month'); 32while ($lastDayOfPrevMonth->format('N') < 7) { 33 $tail = sprintf('<div></div>', $lastDayOfPrevMonth->format('d')) . $tail; 34 $tail = sprintf('<div class="cal cal_td empty"><div class="cal_body"></div></div>', $lastDayOfPrevMonth->format('d')) . $tail; 35 $lastDayOfPrevMonth->sub(new DateInterval('P1D')); 36 $prevmanth = $lastDayOfPrevMonth->format('Y-m'); 37} 38 39// 当月表示 40$body = null; 41$period = new DatePeriod ( 42 new DateTime('first day of' . $yearMonth), 43 new DateInterval('P1D'), 44 new DateTime('first day of' . $yearMonth . '+1 month') 45); 46 47$today = new DateTime('today'); 48foreach ($period as $day) { 49 if ($day->format('N') === '1'){ 50 $body .= '</div></div>'; 51 $body .= '<div class="cal_tr">'; 52 } 53 $days = $day->format('Y-m-d'); 54 55 $sch = ''; 56 foreach($holiday as $key) { 57 $id = $key['id']; 58 $user = $key['account_id']; 59 $from = $key['datetime_from']; 60 $to = $key['datetime_to']; 61 $type = $key['holiday_type']; 62 $comment = $key['comment']; 63 64 if($from == $days){ 65 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 66 $sch .= '<div class="area_btn" data-user="' . $user . '" data-from="' . $from . '" data-to="' . $to . '" data-type="' . $type . '" draggable="true">' . $type . '/' . ' ' .$user .'</div>'; 67 } 68 } 69 70 if($sch !== '') { 71 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 72 $body .= sprintf('<div class="cal cal_td" data-date="' . $days . '"><div class="cal_date day_%d %s">%d</div><div class="cal_plan"></div><div class="cal_body day">' . $sch . '</div></div>', $day->format('w'), $todayClass, $day->format('d')); 73 74 } else { 75 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 76 $body .= sprintf('<div class="cal cal_td" data-date="' . $days . '"><div class="cal_date day_%d %s">%d</div><div class="cal_plan"></div><div class="cal_body day"></div></div>', $day->format('w'), $todayClass, $day->format('d')); 77 } 78} 79 80// 次月表示 81$head = null; 82$firstDayOfNextMonth = new DateTime('first day of' . $yearMonth . '+1 month'); 83// var_dump($firstDayOfNextMonth->format('N')); 84while($firstDayOfNextMonth->format('N') > 1) { 85 $head .= '<div class="cal cal_td empty">' . $firstDayOfNextMonth->format('d'); 86 $head .= '<div class="cal_body"></div>'; 87 $head .= '</div>'; 88 89 $firstDayOfNextMonth->add(new DateInterval('P1D')); 90 $nextMonth = $firstDayOfNextMonth->format('Y-m'); 91} 92 93echo $tr . $tail . $body . $head; 94

jquery

1$(window).on('load', function(){ 2 $.ajaxSetup({ 3 type:'POST', 4 ifModified:false, 5 cache:false, 6 }); 7 8 var ajax_url = './calendar.php'; 9 10 var today = $('.thismonth').attr('data-month'); 11 var date = today; 12 console.log(date); 13 var data = { 14 today : date, 15 }; 16 17 return $.ajax({ 18 url:ajax_url, 19 data:data, 20 }).done(function(data, textStatus, jqXHR){ 21 $('.inner').html(data); 22 }).fail(function(jqXHR, textStatus, errorThrown ){ 23 $('.inner').children('.cal_tr').html(textStatus); 24 }); 25

どの様に対処すればよいか困っています。

よろしくお願いします。

退会済みユーザー👍を押しています

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

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

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

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

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

yambejp

2019/11/19 03:28

「$today = $_POST;」が何したいかわかりません
kenichi_myk

2019/11/19 03:29

htmlの日付を$todayで受けたいと考えています。
m.ts10806

2019/11/19 03:34

PHP側の話であればブラウザの違いによる原因ではないかと。 いずれにしてもインデントが全く整理されてないので手元のコードを調整して貼り付けなおしてください
m.ts10806

2019/11/19 03:35

送信処理もご提示ください
m.ts10806

2019/11/19 03:40

それにAjaxなら画面表示はないはずで、このエラーをどのように感知したのかを知りたいですね
kenichi_myk

2019/11/19 04:41

touch punchを導入したので、iPhoneで確認した際にエラーが出ていました。 まさかと思ってchrome以外のブラウザで確認した所、chrome以外で同様のエラーが表示されていました。 phpはサーバーサイドの言語と言う事は理解しているのですが、なぜブラウザでエラーが出たり出なかったりなのかが分かっていません。
tabuu

2019/11/20 00:32

>なぜブラウザでエラーが出たり出なかったりなのかが分かっていません。 ブラウザによって送信する内容が異なるためです。 同一ブラウザでもバージョンによって異なる場合もあります。 >$thisMonth = new DateTime($today); //21行目はここです。 変数$todayには何が入っていますか? DateTimeクラスのコンストラクタの引数は文字列ですが、想定している文字列が入っているかを、ブラウザごとに確認してみてください。
guest

回答2

0

postに何が入っている想定か、具体的に例示ください

$_POSTをextractするのは良くないですね
またextractにより変数todayは上書きされるのでしょうか?
ちょっと何をしたいのか読み取れないです

投稿2019/11/19 03:37

yambejp

総合スコア114839

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

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

yambejp

2019/11/19 04:13 編集

あと、php側でecho /printなどの出力がないので、なにも返してこないように思えます それとDatetimeクラスが難しいなら、普通の日付関数で処理してみてください
kenichi_myk

2019/11/19 04:37

extractするのはよくなかったんですね。よく調べずに使ってしまっていました。 AjaxでHTMLに出力しています。
yambejp

2019/11/19 04:45

> AjaxでHTMLに出力しています。 いえ、そうではなくてphp側で何らかの文字列が出力されないと ajaxでなにも受け取ることができないという意味です
kenichi_myk

2019/11/19 04:52

当初のphpの下にカレンダーの出力内容を書いているので追加しました。
guest

0

自己解決

$_POSTがセットされている場合といない場合の記述を入れる事で無事解決できました!

様々な方にたくさん助言をいただきありがとうございます。

投稿2019/11/20 02:02

kenichi_myk

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問