2010-04-17 12 views
11

क्या जावास्क्रिप्ट को PHP के time() फ़ंक्शन से लौटाए गए टाइमस्टैम्प की गणना करना संभव है और इसे "सूर्य, 18 अप्रैल 2010 को 4:00 बजे" जैसे एक पठनीय प्रारूप में प्रस्तुत करना संभव है?PHP के समय से जावास्क्रिप्ट पठनीय दिनांक/समय()

उत्तर

25

उपयोग Date object ऐसा करने के लिए:

new Date(<?php echo time(); ?>*1000) 

आप Date क्योंकि 1000 से यूनिक्स टाइमस्टैम्प गुणा करने की आवश्यकता की उम्मीद टाइमस्टैम्प मिलीसेकेंड में किया जाना है।

और तिथि प्रारूप करने के लिए, तो आप इस Date.format method (दिनांक कोई भी में बनाया गया है) का उपयोग कर सकते हैं।

+0

वह दिनांक। प्रारूप विधि देवता है! बहुत बहुत धन्यवाद :) – Lyon

+1

गुणा करने के बजाय आप केवल 3 शून्य जोड़ सकते हैं: var अब = नई तिथि ( 000); –

2

आप इस सामान को करने में वाकई सावधान रहना चाहते हैं। जब आप एक सर्वर-साइड टाइम मान लेते हैं जो कि "युग सीमा" मान के बाद से पारंपरिक "सेकंड (या मिलीसेकंड) की संख्या है, और उसके बाद इसे" दिनांक "ऑब्जेक्ट में बदल दें, तो एक समय के लिए उपयुक्त समय क्षेत्र में अनुवाद होता है संदर्भ का लोकेल।

समस्या तब उत्पन्न होती है जब आपके पास शिकागो में स्थित सर्वर होता है, और आपकी साइट का उपयोग करते हुए हवाई में कोई व्यक्ति, — उन "लुओ" मामलों में से एक है, इसमें कोई संदेह नहीं है, भुना हुआ सुअर और घास के स्कर्ट से भरा हुआ नाचने वाली लड़कियों, गर्म उष्णकटिबंधीय आसमान के नीचे एक दुर्लभ शाम, समुद्री फूलों को डूबने वाले विदेशी फूल — और अब देर हो चुकी है। मेरी भलाई, यह लगभग आधी रात है! मां के बारे में जब भी मैं उसे लिखूं तो माँ क्या सोचती है?

हमारी पार्टी-गोयर आपकी साइट का उपयोग करने के लिए 11:30 बजे बैठता है। अब, निश्चित रूप से, हवाई के काफी पूर्व होने के नाते, आपका सर्वर सोचता है कि यह 5:30 बजे है, और यह तारीख एक दिन बाद है जब हमारी पार्टी-गोयर माँ को अपने त्वरित नोट में उतरेगी। तो आपका सर्वर यहां दिए गए उत्तरों में वर्णित वेब पेज में अपना समय मान लिखता है, और — सही ढंग से — स्थानीय हवाई समय हमारे पार्टी-गोयर के होटल के कमरे में पृष्ठ पर दिखाई देता है।

समस्या यह है: अगर है कि स्थानीय समय इसे वापस कुछ फार्म क्षेत्र से अपने आवेदन करने के लिए बनाता है, और अपने आवेदन शिकागो में स्थानीय समय के रूप में यह व्यवहार करता है, तो आपकी साइट कल की तारीख मिल जाएगा। आपके आवेदन के आधार पर जो ठीक है या यह ठीक नहीं है - बिंदु यह है कि आपको का ट्रैक रखना होगा जहां एक तिथि (सामान्य कैलेंडर नोटेशन में व्यक्त की गई) के साथ आता है, जहां का उपयोग किया जाता है।

आप निश्चित रूप से विपरीत समस्या हो सकती है। यही है, यदि आपका सर्वर हमेशा अपने स्थानीय समय क्षेत्र में तिथियां प्रस्तुत करता है, तो दुनिया में कहीं और उपयोगकर्ता भ्रमित (स्पष्ट रूप से गलत) दिनांक और समय मान देखेंगे, इसलिए इंटरफ़ेस को यह स्पष्ट करना होगा कि उन मानों का क्या अर्थ है। जब आपकी साइट शेड्यूल से संबंधित सेवाएं प्रदान करती है तो समस्याएं महत्वपूर्ण हो जाती हैं। यदि संचालन शेड्यूल करना संभव है, तो यह महत्वपूर्ण है कि इंटरफ़ेस स्तर पर चीजें रखता है ताकि "30 अप्रैल को अपराह्न 10:00 बजे" का अर्थ उस दिनांक और समय सर्वर पर या लोकल में उस दिनांक और समय से है, जिसमें शेड्यूल व्यवस्थित किया गया था। जो भी हो, आपको चीजों को सुसंगत रखने के लिए सावधान रहना होगा।

2

एक संख्यात्मक यूनिक्स टाइमस्टैम्प के बजाय आप Date.parse() समझने की तिथि का एक पाठ्य प्रतिनिधित्व भी भेज सकते हैं।
शायद यह ग्लोबल वार्मिंग में मेरा योगदान है, लेकिन मुझे लगता है कि एक प्रारूप का उपयोग करने में लाभ हैं जो थोड़ा अधिक मानव पठनीय है और इसमें टाइमज़ोन जानकारी शामिल है।

उदा।

<?php 
// I have "decided" America/Los_Angeles fits most of my audience 
date_default_timezone_set('America/Los_Angeles'); 
$now = time(); 
$yesterday = strtotime('yesterday', $now); 
// March 27, 1976 08:00:00 tz:America/Los_Angeles 
$someotherdate = mktime(8, 0, 0, 3, 27, 1976) 
?><html> 
    <head><title>...</title> 
    <script type="text/javascript" src="jquery.min.js"></script> 
    <script type="text/javascript"> 
     function foo() { 
     $('.datetime').each(function() { 
      var t = $(this).text(); 
      t = new Date(Date.parse(t)).toLocaleString(); 
      $(this).text(t); 
     }); 
     } 
    </script> 
    </head> 
    <body> 
    <div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div> 
    <div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div> 
    <div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div> 
    <button onclick="foo()">to local time</button> 
    </body> 
</html> 

यह मेरा ब्राउज़र में

Sat, 17 Apr 2010 04:40:15 -0700 
Fri, 16 Apr 2010 00:00:00 -0700 
Sat, 27 Mar 1976 08:00:00 -0800 

प्रिंट और to local time बटन

Samstag, 17. April 2010 13:40:15 
Freitag, 16. April 2010 09:00:00 
Samstag, 27. März 1976 17:00:00 
+0

हां लेकिन मेरा जवाब देखें। यदि सर्वर जावास्क्रिप्ट को एक समय मान देता है जिसे स्थानीय समय * सर्वर * के अनुसार स्वरूपित किया गया है, तो क्लाइंट सर्वर-साइड टाइम देखेगा। यह वांछित हो सकता है, या यह नहीं हो सकता है; यह आवेदन और समय मूल्य के अर्थ पर निर्भर करता है, किसी भी मामले में यह दृष्टिकोण संख्यात्मक समय मूल्य का उपयोग करने के दृष्टिकोण से अलग-अलग परिणाम देगा। – Pointy

+0

@ पॉइंट: सुनिश्चित नहीं है कि मैं इस मामले में आपकी चिंता को समझता हूं। निस्संदेह मूल्य इस बात पर निर्भर करता है कि सर्वर की घड़ी "सोचने" का समय क्या है, यानी अगर सर्वर की घड़ी गलत है तो मूल्य भी गलत होगा। लेकिन मैंने प्रारूप के रूप में 'gmdate()' और 'डेटटाइम :: डब्ल्यू 3 सी' का उपयोग किया, यानी आउटपुट '2010-04-17T11: 12: 22 + 00: 00' जैसा दिखता है जहां '00: 00' टाइमज़ोन को चिह्नित करता है (कम से कम ऑफसेट)। Date.parse() ऑफसेट को पहचानता है और उसके अनुसार मान का व्यवहार करता है। – VolkerK

+0

ठीक उसी स्थिति में यह निश्चित रूप से "कच्चे" समय मान (संख्यात्मक "सेकंड की संख्या") का उपयोग करने के समान प्रभाव होगा, इसलिए मुझे यह देखने में विफल होने के लिए खेद है। – Pointy

0

से टकराने के बाद (के बाद से मेरी स्थानीय समय क्षेत्र यूरोप/बर्लिन, सीईटी, UTC + 1/2 है) यह अब 2013 है, और जितना अधिक से अधिक लोग जेएसओएन में परिणाम पास करने और क्लाइंट पक्ष पर प्रसंस्करण के लिए PHP पक्ष पर SQL परिणामों को संसाधित करने से स्विच करते हैं, मुझे लगता है कि moment.js को आसान प्रतिलिपि प्रदान करने के लिए स्वयं का कुछ ध्यान देने योग्य है जावास्क्रिप्ट में PHP के strtotime() और दिनांक() कार्यों के लिए cements, और कुछ और।

बस में शामिल हैं:

<script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script> 

तो यह रूप में आसान है के रूप में:

// Simulates ajax response 
var data = { someDate: "2023-08-23 11:52:39" } 

// .unix() converts to Unix timestamp: 1692816759 
moment(data.someDate).unix(); 

// Displaying it in a readable format 
// Aug 23, 11:52 AM 
moment("2023-08-23 11:52:39").format('MMM D, hh:mm A'); 

// Now 
moment(); 

// Support for manipulation and chaining 
moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0); 

आप कर सकते हैं 5.5kb js यहाँ फ़ाइल प्राप्त करें:

http://momentjs.com/

अधिक यहाँ डॉक्स:

http://momentjs.com/docs/

संबंधित मुद्दे