[英]Error converting date to datetime
我用jQuery datepicker在輸入日期中選擇一個日期。
我在datepicker腳本中使用的格式為: dateFormat: 'DD, d MM, yy',
所以我在輸入中得到了這個日期:“ Quinta-feira,1 Maio,2014”(葡萄牙語日期)。
但是現在我需要轉換此日期以將日期時間保存在mysql中。
如果日期是英文,我只需要在下面使用此代碼:
$date = DateTime::createFromFormat('l, j F, Y', $_POST['date']);
echo $date->format('Y-m-d');
但是我的日期不是英語,所以我需要進行轉換,而我試圖使用“ convertDate”下面的函數來執行此操作。
但是,當我調用該函數時,我像這樣傳遞了輸入日期值: convertDate($_POST['date']);
我收到一個錯誤 “在此行的非對象上調用成員函數format() : $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;
}
嘗試使用str_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('Ym-d')
遇到了同樣的錯誤
您可以讓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);
您的方法是錯誤的,在函數的第一行中,您嘗試將葡萄牙語日期轉換為Ymd
格式,因此您的$date
對象開始存在缺陷。
您可能應該做的(假設沒有本地化函數將葡萄牙語中的日期轉換為DateTime ...),是使用字符串替換之類的東西將所有葡萄牙語中的單詞替換為英語單詞,然后再使用原始轉換:
$date = DateTime::createFromFormat('l, j F, Y', $translated_date);
有關的str_ireplace()
單詞不會互相干擾,因此具有兩個數組的str_ireplace()
應該做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.