2012-09-11 8 views
5

Oto mój kod:dlaczego funkcja strftime() w systemie Windows zwraca wartość false? (Nie używam% e)

var_dump(strftime("%m-%d-%Y %l:%M:%S", time())); 
echo "<br />"; 
var_dump(strftime("%Y-%d-%m %H:%M:%S", time())); 

Pierwsza linia zwraca false, a trzeci powraca smyczkowe oczekiwany „09.10.2012 23:03:18” (długość = 19)

Dlaczego pierwsza linia zwraca false?

Używam systemu Windows 7x64 i wampa z dość domyślnymi ustawieniami.

+0

Oba zwracają ciąg daty na moim komputerze (Mac), więc możliwe, że znalazłeś błąd. – zneak

+0

co otrzymujesz z ostrzeżeniami? Ostrzeżenie: wykryto nieprawidłowe parametry CRT w C: \ xampp \ htdocs \ time.php na linii 3 – Scuzzy

+0

Co to jest 'var_dump (strftime ("% m-% d%% Y% H:% M:% S ", czas())); 'return i jakiej wersji językowej Win7 używasz? –

Odpowiedz

5

Jeśli pierwszy wiersz nie działa, ale drugi nie, to powód jest oczywisty ze względu %l

var_dump(strftime("%l", time())); 

rzeczywiście generują błędy w systemie Windows.

Lektura podręcznika strftime ...

Nie wszystkie specyfikatory konwersji mogą być obsługiwane przez biblioteki C, w którym to przypadku nie będą obsługiwane przez PHP strftime(). Ponadto nie wszystkie platformy obsługują ujemne sygnatury czasowe, więc zakres dat może być ograniczony do nie wcześniej niż w epoce Unix. Oznacza to, że% e,% T,% R i,% D (i prawdopodobnie inne) - jak również daty sprzed 1 stycznia 1970 - nie będą działać w systemie Windows, niektórych dystrybucjach Linuksa i kilku innych systemach operacyjnych. W przypadku systemów Windows pełny przegląd obsługiwanych specyfikatorów konwersji można znaleźć na stronie »MSDN.

W związku z tym %l nie jest obsługiwany.

+2

To rzeczywiście jest l. Dziękuję za uwagę (i możliwe, że inni). Musiałam przegapić. W celu uzyskania dalszych informacji, http://msdn.microsoft.com/en-us/library/fe06s4ak.aspx, aby uzyskać listę obsługiwanych konwersji w systemie Windows –

2

Przeglądając to na moim lokalnym serwerze WAMP, znalazłem rozwiązanie dla %l nie działa. Po naprawie %e, którą jest %#d, testowałem używając %#I przez godzinę bez poprzedzającego 0 i działało bezbłędnie. Więc można użyć To jest Twój kod:

var_dump(strftime("%m-%d-%Y %#I:%M:%S", time())); 

Niestety, to nie działa w środowisku Linux, będzie wyjściowej #I zamiast godzinę.

Powiązane problemy