Nima uchun strtotime ('a') vaqtni qaytaradi?

PHP 5.3 da CSV fayli orqali pastadir va tarixlarni tekshiraman. Strtotime() funktsiyasidan foydalandim, va 1 yoki 2 kodni o'z ichiga olgan bitta maydondan tashqari yaxshi ishladi.

strtotime() har qanday bitta chars kodi (), hozirda so'ragan kabi harakat qilyapti (), lekin agar kod 2 chars bo'lsa, men kutganimdek bajarilmaydi.

Strtotime() ishi haqida nima tushundim?

4
@Michael: PHP versiyasi qanday?
qo'shib qo'ydi muallif BoltClock, manba
Men bu xatti-harakatni qayta tiklay olmayman
qo'shib qo'ydi muallif Michael Berkowski, manba
var_dump (strtotime ("a")); bool (noto'g'ri)
qo'shib qo'ydi muallif Michael Berkowski, manba
Kutib turing - sinovdan o'tgan birinchi server hali ham 5.1.6 bilan ishlaydi. Mening 5.3.8 mashinam natija bermoqda
qo'shib qo'ydi muallif Michael Berkowski, manba
@Michael: Mening sinov tizimimda (Win7x64/PHP 5.3.4) bu vaqt tamg'asini ishlab chiqaradi.
qo'shib qo'ydi muallif Jon, manba
codepad.org/uJkeLD2W tegishli natijalar beradi.
qo'shib qo'ydi muallif George Cummins, manba

5 javoblar

http://www.php.net/manual/en saytiga qarang. /datetime.formats.time.php soat formatlari. "A" - bu vaqt zonasi. Bu "a" ishlayotgan va boshqa biror narsaga echim topadigan xatolik bo'lishi mumkin, ammo hech bo'lmaganda tushuntirish.

5
qo'shib qo'ydi
qo'shib qo'ydi muallif nachito, manba
Bu jinoyatchi @Johan B.W. kabi ko'rinadi. de Vris ko'rsatdi. Bu men kutmagan narsa emas.
qo'shib qo'ydi muallif ursasmar, manba

strtotime asosan sizning matningiz nimani anglatishini talqin qilish uchun eng yaxshi ishni qilsa, men uni ma'lum satrlarda ishlamay qoldik deb o'ylamayman.

Misol:

<?php

echo 'Now: ' . date('c') . PHP_EOL;
echo PHP_EOL;
for($c = 'A'; $c <= 'z'; $c = chr(ord($c) + 1)) {
    echo $c . ' - ' . date('c', strtotime($c)) . PHP_EOL;
}

Agar chiqishni http://www.timeanddate.com/library/bbreviations/Timezones/military/, faqat @ tandu'nun xulosasini vaqt dilimlerini (shu jumladan, noto'g'ri tarixga olib keladigan J harfini) yorumlayabileceğini qo'llab-quvvatlayman.

Bu eng yaxshi harakat, deb o'ylayman. Bitta harf bilan shug'ullanish bilan bog'liq muammolar mavjud bo'lsa, oldindan tekshirib ko'ring. Hecham chiroyli emas, lekin tartibsiz ma'lumotlarni ajratib olishga urinayotganda bu nimani anglatadi.

2
qo'shib qo'ydi
Men eng kichik string uzunligi uchun chekni qo'shdim va hozirda ishlayapman.
qo'shib qo'ydi muallif ursasmar, manba

Darhaqiqat, PHP shubhasiz strtotime() da yagona o'lchovli vaqt belgilari bilan SOMETHINGni bajaradi:

Ishlayotgan:

<?php

$now = time();
foreach(range('a', 'z') as $char) {
   $t = strtotime($char, $now);
   echo "$now ($char) -> $t {", ($now - $t), "} [", date($char, $now), "]\n";
}

menga beradi:

1319739230 (a) -> 1319717630 {21600} [pm]
1319739230 (b) -> 1319714030 {25200} [b]
1319739230 (c) -> 1319710430 {28800} [2011-10-27T13:13:50-05:00]
1319739230 (d) -> 1319706830 {32400} [27]
1319739230 (e) -> 1319703230 {36000} [America/Chicago]
1319739230 (f) -> 1319699630 {39600} [f]
1319739230 (g) -> 1319696030 {43200} [1]
1319739230 (h) -> 1319692430 {46800} [01]
1319739230 (i) -> 1319688830 {50400} [13]
1319739230 (j) ->  {1319739230} [27]
1319739230 (k) -> 1319685230 {54000} [k]
1319739230 (l) -> 1319681630 {57600} [Thursday]
1319739230 (m) -> 1319678030 {61200} [10]
1319739230 (n) -> 1319724830 {14400} [10]
1319739230 (o) -> 1319728430 {10800} [2011]
1319739230 (p) -> 1319732030 {7200} [p]
1319739230 (q) -> 1319735630 {3600} [q]
1319739230 (r) -> 1319739230 {0} [Thu, 27 Oct 2011 13:13:50 -0500]
1319739230 (s) -> 1319742830 {-3600} [50]
1319739230 (t) -> 1319746430 {-7200} [31]
1319739230 (u) -> 1319750030 {-10800} [000000]
1319739230 (v) -> 1319753630 {-14400} [v]
1319739230 (w) -> 1319757230 {-18000} [4]
1319739230 (x) -> 1319760830 {-21600} [x]
1319739230 (y) -> 1319764430 {-25200} [11]
1319739230 (z) -> 1319721230 {18000} [299]

Bir belgi uchun "j" ni bir narsa qaytarish umuman noto'g'ri, ammo qolganlari SOMETHINGga qaytadi.

0
qo'shib qo'ydi
echo ((time() - strtotime('a'))/(60 * 60));

PHP "a" ni TZ sifatida sharhlaganidan bu sizning joriy vaqt zonasiga teng bo'lishi kerak.

0
qo'shib qo'ydi

Turli xil belgilar bilan sinab ko'rdim va bitta belgi bilan belgilangan vaqt zonasida joriy vaqt tamg'asi ko'rinadi. Strototime ("z") Zulu vaqti uchun to'rt soat oldin, to'g'ri bo'lgan vaqt tamg'asi sifatida chiqadi. Harbiy vaqt zonalari uchun "J" yo'q.

0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin