簡體   English   中英

將日期轉換為日期時間時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM