2011-12-25 16 views
6

क्या कुछ फ़ंक्शन timetostr है जो किसी दिए गए टाइमस्टैम्प से today/tomorrow/next sunday/etc. आउटपुट करेगा? तो timetostr(strtotime(x))=xphp strtotime reverse

+2

दिनांक()। Http://php.net/manual/en/function.date.php –

+0

@Andypandy देखें: मुझे 'date()' के बारे में पता है। मेरा मतलब था, क्या कोई सीधा काम है जो 'स्ट्रेटोटाइम' के विपरीत होगा? – prongs

+0

यदि तारीख नहीं है, तो मुझे नहीं पता ... क्या आप कुछ और संदर्भ प्रदान कर सकते हैं? इस तरह कुछ ($ timestring = date ('l', $ timestamp) काम नहीं करता है? –

उत्तर

9

यह यहां आने वाले लोगों के लिए उपयोगी हो सकता है।

/** 
* Format a timestamp to display its age (5 days ago, in 3 days, etc.). 
* 
* @param int  $timestamp 
* @param int  $now 
* @return string 
*/ 
function timetostr($timestamp, $now = null) { 
    $age = ($now ?: time()) - $timestamp; 
    $future = ($age < 0); 
    $age = abs($age); 

    $age = (int)($age/60);  // minutes ago 
    if ($age == 0) return $future ? "momentarily" : "just now"; 

    $scales = [ 
     ["minute", "minutes", 60], 
     ["hour", "hours", 24], 
     ["day", "days", 7], 
     ["week", "weeks", 4.348214286],  // average with leap year every 4 years 
     ["month", "months", 12], 
     ["year", "years", 10], 
     ["decade", "decades", 10], 
     ["century", "centuries", 1000], 
     ["millenium", "millenia", PHP_INT_MAX] 
    ]; 

    foreach ($scales as list($singular, $plural, $factor)) { 
     if ($age == 0) 
      return $future 
       ? "in less than 1 $singular" 
       : "less than 1 $singular ago"; 
     if ($age == 1) 
      return $future 
       ? "in 1 $singular" 
       : "1 $singular ago"; 
     if ($age < $factor) 
      return $future 
       ? "in $age $plural" 
       : "$age $plural ago"; 
     $age = (int)($age/$factor); 
    } 
} 
+0

मुझे एक त्रुटि मिल रही है: अप्रत्याशित 'सूची' (T_LIST)। मैं क्या गलत कर रहा हूं? – hozza

+0

PHP संस्करणों के साथ कुछ todo? मुझे सूची 'सूची ($ एकवचन, $ बहुवचन, $ कारक) = $ पैमाने घोषित करके यह काम मिल गया; 'foreach के अंदर और' $ list' – hozza

+0

के साथ foreach prams में सूची को बदलना यह सही है। PHP 5.5 ने जोड़ा "सूची के साथ नेस्टेड सरणी अनपॅक करना()" (http://php.net/manual/en/control-structures.foreach.php) –

1

strtotime रिवर्स फ़ंक्शन नहीं हो सकता क्योंकि यह एक विभाजन नहीं है। जब आप strtotime का उपयोग करते हैं तो स्रोत स्ट्रिंग से आपको यूनिक्स टाइमस्टैम्प मिलता है, जिसे कई अलग-अलग तरीकों से स्वरूपित किया जा सकता है। तो यदि आप फ़ंक्शन को रिवर्स करने का निर्णय लेते हैं, तो आप कैसे जान सकते हैं कि स्ट्रिंग प्रारूप का उपयोग करना है? यह 2010-08-05 या 10 सितंबर 2000, आदि हो सकता है। यही कारण है कि कोई रिवर्स फ़ंक्शन नहीं है, लेकिन एंडीपैंडी ने सही कहा है, आपको date() का उपयोग करना होगा जो आपको वास्तव में स्ट्रिंग प्रारूप को परिभाषित करने की अनुमति देता है जिसे आप समाप्त करना चाहते हैं साथ मुझे पता है कि यह सवाल पुराना है, लेकिन मैंने सोचा कि यह इस उत्तर के लायक है ताकि अन्य उपयोगकर्ता समझ सकें कि PHP में ऐसा कोई फ़ंक्शन क्यों नहीं है।

+5

तकनीकी रूप से "सही" होने पर यह ओपी के प्रश्न का उत्तर नहीं देता है, बल्कि यह सभी जानकार प्रोग्रामर का नकारात्मक रूढ़िवादी आगे बढ़ता है जो बेहतर से बेहतर जानता है प्रश्न पूछने वाला व्यक्ति। एक और तरीका ऐसा कुछ कहना होगा -> http://stackoverflow.com/a/3040437/830899 – unsynchronized

+3

दिनांक ("वाईएमडी", समय()) नौकरी कर सकता है। – Qinjie