2013-02-19 7 views
7

datepickerがBSTに達するまでうまく動作する次のコードがあります。jquery datepicker getTimeがUTCでない

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 
}); 

BST時には、if (date.getTime() == startDates[i]) {は時間差があるため、falseを返します。

どのように私はこれらを一致させることができますか?私はそれがUTCではない日付ピッカー時間だと思う。

EDIT:

select.startdatesからオプションの例は

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

時間がローカライズされるかもしれませんが、私は、docで –

+0

@HugoDozoisを見に行くよ - うん...どのように私は「unlocalize」ことができ任意のアイデアを? – Tom

+0

@Tom:[Date]( 'https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date)オブジェクトの' getTimezoneOffset'メソッドはオフセットを分単位で返します。これを使用して、ローカル日付をUTCに変換することができます。 – Martijn

答えて

2

です。これは、実際にJavaScriptでデフォルトであるDatePickerのは、UTCの日付を返さないように見えますが、ローカルなもの( )。現地時間にあなたの建設の日付を変換するには

$("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を使用することはできません。

あなたではなく、あなたがUTCに日付ピッカーの日付を変換する必要があり、UTCでのごstartDates配列を残したい場合:

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

NB:両方、これらのいずれかの方法または他にないことを選択し、またはあなたは同じ問題に終わるでしょう:-)

0

jQuery datetimepickerのタイムゾーンの更新があるので、サイトを最初にチェックしたいと思うかもしれませんが、ここで私は選択された日付&時間(UTC形式)。

GMTオフセットを使用すると、夏時間を考慮する必要があります。これは悪夢ですので、まずはdatetimepickerを作成し、+0500 GMTの代わりに都市を使用します。

// 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の指示に従って、お住まいの地域の適切なタイムゾーンファイルをダウンロードする必要があります)、ユーザーが選択した今とき

をonSelectメソッドが呼び出されます。

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  
} 

痛みはありませんが、夏時間には関係しません。

UTCタイムスタンプから日付と時間帯でのDateTimePickerを移入するには、この逆のは、次のようになります。あなたが最後の行にSETDATE部分が必要な場合

// 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); 

私は確かではないんだけど、傷つけることはできませんでした。

0

@Martijnコメントに基づいて:

var offset = date.getTimezoneOffset(); 

if (date.getTime() - offset == startDates[i]) 
{ 
     return [true, 'eventDay']; 
} 
関連する問題