2015-10-16 40 views
5

如何使用javascript修復客戶端瀏覽器上的自定義時區?始終使用UTC + 0 - 使用javascript/angularjs修復客戶端瀏覽器上的自定義時區

例如,在角度上我從後臺有一個日期「2015-10-16T00:00:00.000Z」。

我想有一個顯示器(與UTC-4紐約或與UTC + 2法國),總:16/10/2015

閱讀:

如果我使用UTC在紐約,我有:15/10/2015。

<p ng-bind="(myDate | date:'dd/MM/yyyy')"></p> 

寫:

我修改的日期原型的toJSON刪除時區:

// Remove TimeZone 
Date.prototype.toJSON = function(){ 
    return moment(this).format('YYYY-MM-DD') + 'T00:00:00.000Z'; 
}; 
+0

你應該向我們展示一些代碼...你是如何顯示的是最新的嗎? – Buzinas

回答

1

我加的這個:

// Add timeZone 
Date.prototype.addTimeZone = function() { 
    if(this.getTimezoneOffset() > 0){ 
     this.setMinutes(this.getTimezoneOffset()); 
    } 

    return this; 
}; 

這對我的控制器/型號:

new Date(myDate).addTimeZone(); 

要恢復:

延長-日期的prototype.js

// Add timeZone 
Date.prototype.addTimeZone = function() { 
    if(this.getTimezoneOffset() > 0){ 
     this.setMinutes(this.getTimezoneOffset()); 
    } 

    return this; 
}; 

// Remove TimeZone 
Date.prototype.toJSON = function(){ 
    return moment(this).format('YYYY-MM-DD') + 'T00:00:00.000Z'; 
}; 

視圖。 html

<p ng-bind="(myDate | date:'dd/MM/yyyy')"></p> 

controller.js

new Date(myDate).addTimeZone(); 

我用moment.js

0

您可以使用getTimezoneOffset獲取客戶端的偏移量,然後簡單的數學

var dateToTranslate = new Date("2015-10-16T00:00:00.000Z"); 
var timezoneOffset = dateToTranslate.getTimezoneOffset() * 60000; 
var newDate = new Date(+dateToTranslate+timezoneOffset); 
// Fri Oct 16 2015 00:00:00 GMT+0200 (CEST) in my browser 
+1

考慮到歐洲的夏令時,例如,這是行不通的。在德國,冬季的UTC + 1和夏季的UTC + 2。所以你也需要做出改變。 – molerat

+1

如果DST發生變化,getTimezoneOffset可能會返回不同的值 – Hacketo

+0

@molerat我更新了代碼,不知道我是怎麼錯過的,我想應該沒問題。 – Hacketo

相關問題