2014-01-05 4 views
0

Мне нужно ввести таблицу SQLite a DATETIME значение. Дата первоначально была опубликована с именами итальянских месяцев, но в разных форматах (см. Ниже). Мне нужно затем обработать строку перед отправкой ее в базу данных. Тогда я подумал об использовании strftime, который (надеюсь) управлял бы разными форматами после того, как я укажу, что языковой стандарт для каждого формата - итальянский. Это то, что я пробовалПередача итальянской строки datetime на дату()

<?php 

error_reporting(E_ERROR | E_PARSE); 

$dates = array("16:19, 23 set 2010 (CEST)", 
      "10:52, 9 dic 2006 (CEST)", 
      "19:38, Ago 16, 2005 (CEST)", 
      "12:34, Ago 8, 2005 (CEST)", 
      "01:19, Apr 24, 2005 (CEST)"); 

print_r($dates); 

foreach ($dates as $date) { 
    setlocale(LC_TIME, "it_IT"); 
    $date = strftime($date); 
    echo $date."\n"; 
    setlocale(LC_TIME, "en_AU"); 
    echo $date."\n"; 
} 

?> 

Все еще даты не преобразуются в формате времени. Они совсем не конвертируются. Это Ouput:

(
    [0] => 16:19, 23 set 2010 (CEST) 
    [1] => 10:52, 9 dic 2006 (CEST) 
    [2] => 19:38, Ago 16, 2005 (CEST) 
    [3] => 12:34, Ago 8, 2005 (CEST) 
    [4] => 01:19, Apr 24, 2005 (CEST) 
) 
16:19, 23 set 2010 (CEST) 
16:19, 23 set 2010 (CEST) 
10:52, 9 dic 2006 (CEST) 
10:52, 9 dic 2006 (CEST) 
19:38, Ago 16, 2005 (CEST) 
19:38, Ago 16, 2005 (CEST) 
12:34, Ago 8, 2005 (CEST) 
12:34, Ago 8, 2005 (CEST) 
01:19, Apr 24, 2005 (CEST) 
01:19, Apr 24, 2005 (CEST) 
+1

есть ли SPECI Почему вы не можете просто заменить имена месяцев? Я знаю, что это не самое элегантное решение, но оно одно – kero

ответ

1
$date = strftime($date); 

Это не правильное использование этой функции, вы передаете в дату, формат, который ничего не делает.

STRFTIME - форматирует местное время/дату в соответствии с настройками локали

То, что я думаю, что вы хотите

strftime($date_format, strtotime($date)); 

Однако StrToTime только разбирает даты на английском языке (и принимает M/D/Y конвенции над d/M/Y)

Так что вам нужно будет заменить месяцев первые

<?php 

$dates = array("16:19, 23 set 2010 (CEST)", 
    "10:52, 9 dic 2006 (CEST)", 
    "19:38, Ago 16, 2005 (CEST)", 
    "12:34, Ago 8, 2005 (CEST)", 
    "01:19, Apr 24, 2005 (CEST)"); 


function convert_date_to_english($date_in_italian) { 

    // TODO complete this table, I don't know italian sorry 
    $months = array(
     'set' => 'sep', 
     'dic' => 'dec', 
     'apr' => 'apr', 
     'ago' => 'aug' 
    ); 

    return str_replace(array_keys($months), array_values($months), strtolower($date_in_italian)); 
} 


foreach ($dates as $date) { 
    $date = convert_date_to_english($date); 
    $timestamp = strtotime($date); 

    setlocale(LC_ALL, "it_IT"); 
    $date = strftime("%A %e %B %Y", $timestamp); 
    echo $date."\n"; 

    setlocale(LC_ALL, 'en_AU'); 
    $date = strftime("%A %e %B %Y", $timestamp); 
    echo $date."\n"; 
} 
Смежные вопросы