2014-05-01 68 views
2

我使用jQuery datepicker在輸入日期中選擇一個日期。將日期轉換爲日期時間時出錯

,即時通訊在日期選擇器腳本中使用的格式爲:dateFormat: 'DD, d MM, yy',

所以我在輸入獲取此日期:「金塔 - 費拉,1馬尤2014」(葡萄牙語日期)。

但現在我需要將此日期轉換爲保存,如日期時間在MySQL中。

我只需要下面使用此代碼,如果日期是在英語:

$date = DateTime::createFromFormat('l, j F, Y', $_POST['date']); 
echo $date->format('Y-m-d');  

但我的約會心不是英語,所以我需要做的轉換和我試着用下面的「convertDate」的功能做這個。

但是,當我調用函數,並我通過輸入日期值是這樣的:convertDate($_POST['date']);

我收到一個錯誤電話在該成員函數格式()非對象上行:$day= $date->format("l");

你看到了什麼在這裏因爲溫控功能對我來說似乎不錯

function convertDate($myDate){ 

     $date = DateTime::createFromFormat('Ymd', $myDate); 
     $day = $date->format("l"); 
     $daynum = $date->format("j"); 
     $month = $date->format("F"); 
     $year = $date->format("Y"); 

     switch($day) 
     { 
      case "Segunda-Feira": $day = "Monday"; break; 
      case "Terça-Feira":  $day = "Tuesday"; break; 
      case "Quarta-Feira":  $day = "Wednesday"; break; 
      case "Quinta-Feira":  $day = "Thursday"; break; 
      case "Sexta-Feira":  $day = "Friday"; break; 
      case "Sábado":   $day = "Saturday"; break; 
      case "Domingo":   $day = "Sunday"; break; 
      default:     $day = "Unknown"; break; 
     } 

     switch($month) 
     { 
      case "Janeiro": $month = "January"; break; 
      case "Fevereiro": $month = "February"; break; 
      case "Março":  $month = "March";  break; 
      case "Abril":  $month = "April";  break; 
      case "Maio":  $month = "May";  break; 
      case "Junho":  $month = "June";  break; 
      case "Julho":  $month = "July";  break; 
      case "Agosto":  $month = "August"; break; 
      case "Setembro": $month = "September"; break; 
      case "Outubro": $month = "October"; break; 
      case "Novembro": $month = "November"; break; 
      case "Dezembro": $month = "December"; break; 
      default:   $month = "Unknown"; break; 
     } 

    echo $daynum . ", " . $month . ", " . $year; 
} 

與S嘗試?! tr_ireplace:

$english = array("Segunda-Feira","Terça-Feira","Quarta-Feira","Quinta-Feira","Sexta-Feira","Sábado","Domingo"); 
$portuguese = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"); 
$result= str_ireplace ($english , $portuguese, $_POST['date']); 
$date = DateTime::createFromFormat('l, j F, Y', $result); 
echo $date->format('Y-m-d'); 

echo $date->format('Y-m-d')得到了同樣的錯誤

+0

做一個'var_dump($ myDate)'給我們看結果請。 –

+0

我收到這個:「string(25)」Sexta-feira,2 Maio,2014「」,這是我在日期選擇器中選擇的日期! – OzzC

+0

你回到你最後一個問題中的同樣的問題。該日期格式不適用於'DateTime()'(並且您在createFromFormat中的格式不正確)。我建議使用正則表達式將此日期字符串分解爲您需要的部分。從那裏你的代碼的其餘部分應該工作。 –

回答

1

你的做法是錯誤的,在你的函數的第一行,你嘗試轉換您的葡萄牙日期好像是在Ymd格式,所以你$date對象有缺陷開始。

你可能應該做些什麼(假設沒有本地化函數來將葡萄牙語日期轉換爲DateTime ...)使用類似於字符串替換的東西來替換所有葡萄牙語單詞和英文單詞,然後使用原始轉換:

$date = DateTime::createFromFormat('l, j F, Y', $translated_date); 

的三十四分之十七詞語有關不相互干擾,從而與str_ireplace()兩個陣列應該這樣做。

+0

感謝這似乎是一個很好的解決方案,我不知道這個功能,但它似乎是一個很好的解決方案。但是我的函數convertDate()有同樣的錯誤。 – OzzC

+1

@OzzC你忘了添加月份。在翻譯之後,你應該做一個'var_dump($ result);'來驗證它是你期望的。 – jeroen

+0

謝謝,我真的忘記了幾個月!現在我認爲我更接近,但林有一個錯誤「可捕獲的致命錯誤:類DateTime coudld的對象不會被轉換爲我的sql行$ insertNews-> bindValue(':date',$ date);字符串但我已經你知道爲什麼會出現這個錯誤嗎? – OzzC

2

,而不是試圖翻譯的話日期在可能的各種語言,你可以有JQuery的滴在一個隱藏的表單字段各種各樣的UTC和工作與此相反:

這將返回一個JS日期對象:

var currentDate = $(".selector").datepicker("getDate"); 

這將使它從一個PHP UTC(這是在微秒的JS ...)

var phputc = Math.ceil((currentDate.getTime()/1000)); 

這將會把在一個隱藏的表單:

$(".selector").change(
     function() 
     { 
      var currentDate = $(".selector").datepicker("getDate"); 
      var phputc = Math.ceil((currentDate.getTime()/1000)); 
      document.forms[0].nameofhiddenformfield.value = phputc; 
     } 
    ); 

確保有你的形式

<input type="hidden" name="nameofhiddenformfield" /> 

而在PHP端你可以再這樣的場做:

$dateUTC = $_POST['nameofhiddenformfield']; 
    echo date('Y-m-d',$dateUTC); 
+0

+1肯定是更好的解決方案。 – jeroen

+0

謝謝你的解決方案,但是我扼殺我得到這個錯誤:日期()期望參數2是很長,字符串給出。當我做回聲日期('YM - D',$ dateUTC); – OzzC

+0

CAn你轉儲$ dateUTC嗎?可能只是一個鑄造問題... –

相關問題