2013-02-19 63 views
7

मेरे पास निम्न कोड है जो डेटपिकर बीएसटी तक पहुंचने तक ठीक काम करता है।jquery datepicker getTime यूटीसी

var i; 
function showEventDates(date) { 
    for (i = 0; i < startDates.length; i++) { 
    if (date.getTime() == startDates[i]) { 
     return [true, 'eventDay']; 
    } 
    }  
    return [false, '']; 
} 
var startDates = new Array(); 

$("select.startdates").find("option").each(function() { 
    startDates.push(Date.UTC.apply(Date, this.value.split(",").map(Number))); 
}); 

$('#mydate').datepicker({ 
    beforeShowDay: showEventDates 
}); 

बीएसटी के दौरान लाइन if (date.getTime() == startDates[i]) { झूठी वापसी करती है क्योंकि इसमें एक घंटे का अंतर होता है।

कोई विचार मैं इन्हें कैसे मिलान कर सकता हूं? मुझे लगता है कि यह डेटपिकर समय है जो यूटीसी नहीं है।

संपादित करें:

select.startdates से एक विकल्प का एक उदाहरण

<option value="2013, 2, 1">01/03/2013</option> 
+0

समय स्थानीयकृत हो सकता है, मैं दस्तावेज़ देख –

+0

@HugoDozois जाता हूँ - हाँ ... किसी भी विचार कैसे मैं "unlocalize" कर सकते हैं यह ?? – Tom

+0

@ टॉम: [डेट] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date) ऑब्जेक्ट की 'getTimezoneOffset' विधि) मिनट में ऑफ़सेट लौटाती है। आप स्थानीय तारीख को यूटीसी में बदलने के लिए इसका उपयोग कर सकते हैं। – Martijn

उत्तर

2

यह datepicker तरह लग रहा है वापस नहीं करता है यूटीसी तारीखें है, लेकिन स्थानीय लोगों को (जो वास्तव में जावास्क्रिप्ट में डिफ़ॉल्ट है)।

स्थानीय समय के लिए अपने निर्माण की दिनांक बदलने के लिए:

$("select.startdates").find("option").each(function() { 
    var d = Date.UTC.apply(Date, this.value.split(",").map(Number)); 
    d = d + new Date(d).getTimezoneOffset() * 60000; // convert UTC to local 
    startDates.push(d); 
}); 

आम तौर पर, मैं Date.UTC समारोह के बजाय new Date(year, month, day) निर्माता का उपयोग करना चाहते हैं, लेकिन आप Date निर्माता के साथ apply उपयोग नहीं कर सकते।

आप बल्कि यूटीसी में अपने startDates सरणी छोड़ चाहते हैं, तो आप यूटीसी के लिए datepicker की तारीख बदलने की आवश्यकता:

function showEventDates(date) { 
    date = date - new Date(date).getTimezoneOffset() * 60000; // convert local to UTC 
    // for ... 
} 

एनबी: एक या इन तरीकों, दोनों नहीं के अन्य चुनते हैं, या आप एक ही समस्या के साथ खत्म हो जाएंगे ... :-)

0

मुझे लगता है कि jQuery डेटीमिपिकर के लिए कुछ टाइमज़ोन अपडेट हैं ताकि आप पहले साइट को देखना चाहें, हालांकि यहां मैंने जो किया है चयनित दिनांक & यूटीसी प्रारूप में समय।

पहले डेटाटेम्पीकर बनाएं और +0500 जीएमटी के बजाय शहरों का उपयोग करें क्योंकि यदि आप जीएमटी ऑफ़सेट का उपयोग करते हैं तो आपको डेलाइट बचत खाते में लेना होगा - और यह एक दुःस्वप्न है।

// create ye datetimepicker with timezone options 
$('#datetimepicker').datetimepicker({ 
    showTimezone: true, 
    onSelect: onSelect, 
    timezoneList: [ 
     { value: 'America/New_York', label: 'New York'}, 
     { value: 'America/Chicago', label: 'Chicago' } , 
     { value: 'America/Denver', label: 'Denver' }, 
     { value: 'America/Los_Angeles', label: 'Los Angeles' } 
    ]); 

इसके बाद, से mde on Github timezoneJS.Date पुस्तकालय हड़पने (नोट: आप भी अपने क्षेत्र के लिए उपयुक्त समय क्षेत्र फ़ाइलों को डाउनलोड करने के लिए, बस README निर्देशों का पालन करें की आवश्यकता होगी)

अब जब उपयोगकर्ता एक का चयन करता है ऑन-सिलेक्ट विधि को कॉल करने की तिथि।

function onSelect(dateText, dateInst) { 
    // get the date without the timezone data 
    var d = $('#datetimepicker').datepicker('getDate'); 

    // init timezoneJS 
    timezoneJs.timezone.zoneFileBasePath = '/tz'; 
    timezoneJs.timezone.init(); 

    // get the selected timezone 
    var tz = $('#datetimepicker').data('datepicker').settings.timepicker.timezone 

    // construct the utcDate with the help of the timezoneJS.Date lib 
    var utcDate = new timezoneJS.Date(
    d.getFullYear(), 
    d.getMonth(), 
    d.getDate(), 
    d.getHours(), 
    d.getMinutes(), 
    tz) 
    var utcLinuxTimestamp = utcDate.getTime()/1000  
} 

बिल्कुल दर्द रहित नहीं है, लेकिन यह आपके लिए डेलाइट बचत सामग्री का ख्याल रखता है।

इस के पीछे एक यूटीसी टाइमस्टैम्प से एक तिथि और एक समय क्षेत्र के साथ एक DateTimePicker पॉप्युलेट करने के लिए इस तरह दिखता है:

// init timezone JS 
timezoneJs.timezone.zoneFileBasePath = '/tz'; 
timezoneJs.timezone.init(); 

// get timezone date JS object 
var tz = 'America/New York'; 
var d = new timezoneJS.Date(timestamp * 1000, tz); 

$('#datetimepicker').datetimepicker({ 
    showTimezone: true, 
    timezoneList: [ 
     { value: 'America/New_York', label: 'New York'}, 
     { value: 'America/Chicago', label: 'Chicago' } , 
     { value: 'America/Denver', label: 'Denver' }, 
     { value: 'America/Los_Angeles', label: 'Los Angeles' } 
    ], 
    timezone: tz, 
    defaultDate: d._dateProxy, 
    onSelect: onSelect 
}).datepicker('setDate',d._dateProxy); 

मैं अगर आप अंतिम पंक्ति पर setDate भाग की जरूरत है कुछ नहीं कर रहा हूँ, लेकिन चोट नहीं पहुंची

0

@Martijn टिप्पणी के आधार पर:

var offset = date.getTimezoneOffset(); 

if (date.getTime() - offset == startDates[i]) 
{ 
     return [true, 'eventDay']; 
} 

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

  • कोई संबंधित समस्या नहीं^_^