Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果语言不是英语,如何将字符串转换为日期时间_Php_String - Fatal编程技术网

Php 如果语言不是英语,如何将字符串转换为日期时间

Php 如果语言不是英语,如何将字符串转换为日期时间,php,string,Php,String,有一个日期和时间字符串,格式为“2ааааа2020,21:00,П'ааааа 我想把它转换成DateTime。 我试着转换 setlocale(LC_ALL, 'uk_UA'); $t = '2 листопада 2020, 21:00, п’ятниця'; $date = date_create_from_format('j F Y, H:i, l', $t); 如果语言为英语,则转换日期(如果乌克兰语不起作用)。如何设置转换语言。我认为setLocale设置不会影响Date

有一个日期和时间字符串,格式为“2ааааа2020,21:00,П'ааааа 我想把它转换成DateTime。 我试着转换

    setlocale(LC_ALL, 'uk_UA');
$t = '2 листопада 2020, 21:00, п’ятниця';
$date = date_create_from_format('j F Y, H:i, l', $t);

如果语言为英语,则转换日期(如果乌克兰语不起作用)。如何设置转换语言。

我认为setLocale设置不会影响DateTime类的功能。这门课需要英文名字。解决这个问题的一个简单方法是翻译月份名称而忽略日期名称。如果忽略日期名称,则示例中的错误名称无法生成错误

$t = '2 листопада 2020, 21:00, п’ятниця';

$trans = [
  'січня' => "January",
  'лютого' => "February",
  'березня' => "March",
  'квітня' => "April",
  'травня' => "May",
  'червня' => "June",
  'липня' => "July",
  'серпня' => "August",
  'вересня' => "September",
  'жовтня' => "October",
  'листопада' => "November",
  'грудня' => "December",
];


$inputEn = strtr($t, $trans);
$date = date_create_from_format('j F Y, H:i, *', $inputEn);

var_dump($date);
//object(DateTime)#1 (3) { ["date"]=> string(26) "2020-11-02 21:00:00.000000" ...
此解决方案独立于setlocale设置工作

上面显示的算法内置于一个名为dt的PHP扩展中,用于DateTime API。你可以找到它

与该类一起使用非常简单:

$t = '2 листопада 2020, 21:00, п’ятниця';

$ok = dt::setDefaultLanguage('uk_UA');
$dt = dt::createDtFromFormat('j F Y, H:i, *', $t);

echo $dt; //2020-11-02 21:00:00

2020年11月2日不是星期五@没有星期五也不行<代码>代码$t='2аиаааа2020,21:00';setlocale(LC_ALL,'uk','ukr')$日期=从格式创建日期('JFY,H:i',$t)
code
您应该检查是否安装了ukr语言环境:@Sammitch我试过了,一台机器有不同的语言环境“uk_-UA”,但代码仍然不起作用。在我看来,date\u create\u from\u格式只适用于英语。请检查setLocale()的返回值$retVal=setlocale(LC_ALL,'uk_UA');var_dump($retVal);如果未安装ukr区域设置,则会得到false。