में स्थानीयकृत दिनांक तारों को पार्स करना मेरे पास कुछ कोड है (यह एक वर्डप्रेस प्लगइन का हिस्सा है) जो एक टेक्स्ट स्ट्रिंग लेता है, और तिथि() को दिए गए प्रारूप विनिर्देशक, और घंटे, मिनट, जिसमें एक सरणी में इसे पार्स करने का प्रयास करता है, दूसरा, दिन, महीना, वर्ष।PHP
वर्तमान में, मैं निम्नलिखित कोड का उपयोग (ध्यान दें कि strtotime 01/02/03 जैसी चीजों के साथ बुरी तरह अविश्वसनीय है)
// $format contains the string originally given to date(), and $content is the rendered string
if (function_exists('date_parse_from_format')) {
$content_parsed = date_parse_from_format($format, $content);
} else {
$content = preg_replace("([0-9]st|nd|rd|th)","\\1",$content);
$content_parsed = strptime($content, dateFormatToStrftime($format));
$content_parsed['hour']=$content_parsed['tm_hour'];
$content_parsed['minute']=$content_parsed['tm_min'];
$content_parsed['day']=$content_parsed['tm_mday'];
$content_parsed['month']=$content_parsed['tm_mon'] + 1;
$content_parsed['year']=$content_parsed['tm_year'] + 1900;
}
यह वास्तव में काफी अच्छी तरह से काम करता है, और हर संयोजन मैं फेंक दिया गया है संभाल करने के लिए लगता है इस पर।
हालांकि, हाल ही में किसी ने मुझे 24 Ноябрь, 2010
दिया। यह 24 नवंबर, 2010 के लिए रूसी है [दिनांक प्रारूप j F, Y
] था, और इसे वर्ष = 2010, महीने = शून्य, दिन = 24.
क्या कोई भी कार्य है जिसका मैं उपयोग कर सकता हूं जो अनुवाद करना है नवंबर और Ноябрь दोनों में 11 में?
संपादित करें:
print_r(setlocale(LC_ALL, 0));
रिटर्न C
चल रहा है। strptime()
पर वापस स्विच समस्या को ठीक करने लगता है, लेकिन डॉक्स चेतावनी दी है:
आंतरिक रूप से, इस फ़ंक्शन को कॉल सिस्टम के सी पुस्तकालय द्वारा प्रदान की strptime() फ़ंक्शन। यह कार्य विभिन्न ऑपरेटिंग सिस्टमों में उल्लेखनीय रूप से अलग व्यवहार प्रदर्शित कर सकता है। Date_parse_from_format() का उपयोग, जो इन मुद्दों से ग्रस्त नहीं है, PHP 5.3.0 और बाद में अनुशंसित है।
date_parse_from_format()
सही एपीआई है, और यदि हां, तो मैं भाषा को पहचानने के लिए इसे कैसे प्राप्त करूं? रूस as hinted in the manual लिए स्थान निर्धारित करने के लिए
समस्या यह है कि यह एक प्लगइन है जो अन्य लोग उपयोग कर सकते हैं ... "उचित" समाधान ढूंढना अच्छा लगेगा। लेकिन मुझे लगता है कि जब तक मैं काम नहीं कर रहा हूं तब तक मैं सिर्फ 'strptime()' तक रहूंगा ... – Mikeage
@ माइकेज ए यूनिटटेस्ट उचित है :) यदि आप 'date_create_from_format' स्थानीय तारों को पार्स कर सकते हैं तो आप कोशिश कर सकते हैं। मुझे नहीं लगता कि यह करता है, लेकिन फिर भी कोशिश करें। – Gordon
मैंने बिना किसी सफलता के 18 मैग 2013 (= 2013-05-18) की तरह इतालवी तिथि को पार्स करने के लिए strptime() और date_create_from_format दोनों की कोशिश की। – damko