2016-04-27 60 views
-2

我有以下代碼可將JavaScript中的長日期格式轉換爲mm/dd/yyyy。當從控制檯日誌中,newValu爲「日期2016-12-29T00:00:00.000Z」時,date_str會返回一天,變成「2016/12/28」。不知道是什麼導致了這個問題。如果我們用1遞增d(天),這是行不通的,因爲我們可能需要增加的月代替,如果D = 31JavaScript將長日期格式轉換爲mm/dd/yyy

     console.log(newValue); 
         var date = newValue; 
         var d = date.getDate(); 
         var m = date.getMonth() + 1; 
         var y = date.getFullYear(); 
         date_str = (m<=9 ? '0' + m : m) + '/' + (d <= 9 ? '0' + d : d) + "/" + y; 
+1

[格式日期的可能的複製MM/dd/yyyy in javascript](http://stackoverflow.com/questions/11591854/format-date-to-mm-dd-yyyy-in-javascript) –

+0

什麼是* newValue *,一個字符串或Date對象? – RobG

回答

0

這裏一個小竅門:

function change(date) { 
     var r = String(date).match(/^\s*([0-9]+)\s*-\s*([0-9]+)\s*-\s*([0-9]+)(.*)$/); 
     return r[2] + "-" + r[3] + "-" + r[1] + r[4]; 
    } 

這功能將返回「mm/dd/yyyy」。

0

不知道是什麼導致了問題。

如果NEWVALUE是一個Date對象,當打印到控制檯你 「2016-12-29T00:00:00.000Z」,請注意,這是GMT

如果主機系統的時區在GMT(例如-0400)以西,那麼相應的日期將是「2016-12-28T20:00:00.000Z」,即提前4小時(和前一天) 。當您使用純得到方法(GETDATE調用getHoursgetMinutes等),這是你得到這些值。

因此您的日期字符串對於主機系統的時區是正確的。

var x = new Date('2016-12-29T00:00:00.000Z'); 
 

 
// Local equivalent on your host system 
 
document.write(x); 
 

 
// UTC values in ISO 8601 format 
 
document.write('<br>' + x.toISOString()); 
 

 
// Date string from ISO parts 
 
document.write('<br>'+ ('0'+(x.getUTCMonth()+1)).slice(-2) + '-' + 
 
       ('0'+x.getUTCDate()).slice(-2) + '-' + 
 
       x.getUTCFullYear());

如果你想在你的日期字符串匹配Date對象的UTC值的值,然後使用UTC方法:

var d = date.getUTCDate(); 
var m = date.getUTCMonth() + 1; 
var y = date.getUTCFullYear();