2009-10-20 98 views
1

任何人都可以在這個函數中發現任何錯誤嗎? ..這是一個函數,它接收yyyy-mm-dd類型的字符串hh:mm:ss aa並轉換爲UTC並生成一個字符串yyyy-mm-dd hh:mm:ss。yyyy-mm-dd javascript轉換hh:mm:ss aa help

function LocalTimetoUTC(localTime) 
{ 

    var time = localTime.split(" "); //Received :- yyyy-mm-dd hh:mm:ss aa 
    var yearday = time[0].split("-"); 
    var dateTime = time[1].split(":"); 
    var ampm = time[2]; 
    var hours = 0; 

    var year = yearday[0]; 
    var month = yearday[1]-1; 
    var day = yearday[2]; 

    hours = dateTime[0]; 
    var minutes = dateTime[1]; 
    var seconds = dateTime[2]; 

    /* We have to first convert it to 24 hour format 
    * 12:00:00 AM : 00:00:00 
    * 12:00:00 PM : 12:00:00 
    * Anytime other than 12 
    * 1:00:00 AM : 1:00:00 
    * 1:00:00 PM : 13:00:00 
    */ 
    if(ampm == "PM") 
    {  
     //If it is 12PM, adding 12 will create a problem 
     if(hours != 12) 
     { 
      hours +=12; 
     } 
    } 
    else //AM CASE 
    { 
     if(hours == 12) 
     { 
      hours = 00; 
     } 
    } 


    var now = new Date(year,month,day,hours,minutes,seconds); 

    var utcString = now.getUTCFullYear()+"-" 
        +(now.getUTCMonth()+1)+"-"+now.getUTCDate()+"" 
        +now.getUTCHours()+":"+now.getUTCMinutes()+":"+now.getUTCSeconds(); 

    return utcString; 
} 
+1

你有什麼樣的錯誤? – luc 2009-10-20 12:05:19

+4

錯誤診斷的第一步,正確命名您的變量!例如「time」是一個包含日期,時間和ampm元素的數組。 – AnthonyWJones 2009-10-20 12:21:19

回答

1

您的主要問題是您正在使用的字符串中的數字業務。另外你的輸出格式也有一些問題。這是一個未經測試的重構: -

function convertToUTCString(localTime) 
{ 
    var dateTimeComponents = localTime.split(" "); 
    var dateComponent = dateTimeComponents[0].split("-"); 
    var timeComponent = dateTimeComponents[1].split(":"); 
    var ampm = dateTimeComponents[2] 

    var dat = new Date(parseInt(dateComponent[0]), 
    parseInt(dateComponent[1]) -1, 
    parseInt(dateComponent[2]), 
    parseInt(timeComponent[0]) % 12, 
    parseInt(timeComponent[1]), 
    parseInt(timeComponent[2])); 

    if (ampm == "PM") // do all locales use 'AM'/'PM' ?? 
    { 
    dat.setHours(dat.getHours() + 12); 
    } 

    function pad(val) 
    { 
    var s = val.toString(); 
    return s.length < 2 ? "0" + s : s 
    } 

    return dat.getUTCFullYear() + "-" + 
    pad((dat.getUTCMonth() + 1)) + "-" + 
    pad(dat.getUTCDate()) + " " + 
    pad(dat.getUTCHours()) + ":" + 
    pad(dat.getUTCMinutes()) + ":" + 
    pad(dat.getUTCSeconds()); 
} 
+0

@anthony 你是男人!..它工作:)我想你是對的..我正在使用字符串和錯誤的命名。 dat.setHours()很有趣。 @luc 我沒有得到任何錯誤,但我的輸出是垃圾。就像月份是+1,一天完全是隨機的。 – uday 2009-10-20 13:14:18

0

Yyou應該使用Datejs解析日期