2014-05-01 65 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吗?可能只是一个铸造问题... –

相关问题