2014-06-08 11 views
5

में स्थानीय समय क्षेत्र स्थापित करने के लिए कैसे जब मैं बनाने या पाल पर अद्यतन रिकॉर्ड यह updateAt पर यह लिख:Sails.js या Express.js

updatedAt: 2014-07-06T15:00:00.000Z 

लेकिन मैं GMT + 2 घंटे में कर रहा हूँ (इस मौसम में) और अपडेट 16:00 पर किया जाता है।

मुझे अपने मॉडल में घोषित सभी डेटाटाइम फ़ील्ड के साथ एक ही समस्या है।

मैं सेल (या अंततः एक्सप्रेस) पर सही टाइमज़ोन कैसे सेट कर सकता हूं?

+0

में डाल process.env.TZ = 'UTC'; //whatever timezone you want

सर्वर जहां आपके आवेदन काम करता है स्थानीय समय निर्धारित किया है। ऐसा नहीं है? – diproart

उत्तर

1

अपने सर्वर पर टाइमज़ोन सेट करके अपनी समस्या को हल करने का प्रयास थोड़ा सा दिखता है। क्या होगा यदि आप आगे बढ़ें? या किसी दूसरे देश में कोई आपके आवेदन का उपयोग करता है? महत्वपूर्ण बात यह है कि आपके डेटाबेस में टाइमस्टैम्प में एक टाइमज़ोन एन्कोड किया गया है, ताकि आप को सही समय पर सही समय पर अनुवाद कर सकें। यही है, यदि आप करते हैं:

new Date('2014-07-06T15:00:00.000Z') 

अपने ब्राउज़र कंसोल में, आपको यह देखना चाहिए कि आप कहीं भी सही दिनांक और समय प्रदर्शित कर सकते हैं। सेल स्वचालित रूप से आपके लिए इस टाइमस्टैम्प को डिफ़ॉल्ट updatedAt और createdAt फ़ील्ड के साथ एन्कोड करता है; बस डेटाबेस पर किसी भी कस्टम टाइमस्टैम्प को सहेजते समय सुनिश्चित करें कि आप हमेशा टाइमज़ोन का उपयोग करते हैं, और आपको ठीक होना चाहिए!

0

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

उदाहरण के लिए, मान लें कि डेटाटाइम फ़ील्ड को "विशेष" कहा जाता है। अगर मैं एपीआई के माध्यम से "विशेष" बराबर "06-09-2014" (समय की अनदेखी) के साथ एक नया रिकॉर्ड बनाता हूं, तो मैं एक खोज क्वेरी चलाने में सक्षम नहीं हूं जिसमें मैं "06-09-2014" और उस रिकॉर्ड को वापस प्राप्त करें। प्रश्नों से बढ़िया काम ठीक है (अगर मैं उससे अधिक तारीख के लिए एक खोज करता हूं)। मुझे यकीन है कि यह एक टाइमज़ोन ऑफसेट चीज है, लेकिन समाधान के साथ आने में सक्षम नहीं है।

2

मैं, समस्या हल हो तुम MySql विकल्प फ़ाइल यहाँ इस

devMysqlServer: { 
    adapter: 'sails-mysql', 
    host: '127.0.0.1', 
    user: 'root', 
    password: '***', 
    database: '**', 
    timezone: 'utc' 
    }, 
1

सबसे अच्छा वास्तुकला की योजना बना पर सेटिंग की स्थापना config में यूटीसी के समय क्षेत्र बदलने के लिए चाहिए/connections.js, IMO, करने के लिए है Sails.js isoDate स्वरूपण का उपयोग जारी रखें। जब आप उपयोगकर्ता की लोड करते हैं तो आपकी वेबसाइट/ऐप isoDate को उनके क्लाइंट/ब्राउज़र टाइमज़ोन में परिवर्तित कर दिया जाएगा जो आमतौर पर ओएस स्तर पर सेट होता है।

यहां एक उदाहरण है जिसके साथ आप इसका परीक्षण कर सकते हैं। ब्राउज़र कंसोल खोलें और new Date().toISOString() चलाएं और इसे सेट करने के समय को देखें। यह isoDate 8601 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) के लिए spec के आधार पर होने जा रहा है। अब, अपने सिस्टम समय को किसी भिन्न समय क्षेत्र में बदलें या बस उस समय अपना घंटा बदलें और सहेजें (यदि आप क्रोम कंसोल का उपयोग कर रहे हैं तो आपको पुनः लोड नहीं करना चाहिए)। कंसोल में अपना कमान फिर से चलाएं new Date().toISOString() और आपको बस उस समय के लिए एक समायोजित समय मिलेगा जब आपने अभी बदला था।

आप अपने आप को समय Sails.js उपयोग करने के लिए, एक isoDate कि इतने moment("2016-02-05T22:36:48.800Z").fromNow() और आप 'की तरह अपने डेटाबेस में संग्रहीत किया जाता है (जलरेखा ORM द्वारा बनाई गई) पर Moment.js का उपयोग उचित है साबित पर जारी रखने के लिए करना चाहते हैं तो आप देखेंगे कि समय आपके सिस्टम के समय से संबंधित है।

7

तरह से मैं अनुसंधान के घंटे के बाद समस्या संभाला:

config/bootstrap.js

+0

यह काम कर रहा है जब मैं विकास env पर चल रहा हूं, लेकिन यह उत्पादन env – Arshad

+0

में काम नहीं कर रहा है यह मेरे लिए एकदम सही समाधान है। –

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