2012-04-16 34 views
12

これはかなり簡単な質問のようですが、私はそれに答えてもらえません。 JavaScriptを使用してisoタイムスタンプを日付/時刻を表示するように変換するにはどうすればよいですか?isoタイムスタンプをJavascriptで日付形式に変換しますか?

例のタイムスタンプ:2012-04-15T18:06:08から07:すべてのヘルプは高く評価され00

は、Googleが私を失敗しています。ありがとうございました。

+0

可能なDUP http://stackoverflow.com/questions/847185/convert-a-unix-timestamp-to- time-in-javascript – elclanrs

+5

UNIXタイムスタンプとisoタイムスタンプ同じではないので、重複していません。 – Ian

+0

ISOタイムスタンプに文字列がありますか?それをjavascriptの 'Date()'クラスに解析したいのですか? – jfriend00

答えて

27

Dateコンストラクタに渡します。

> var date = new Date('2012-04-15T18:06:08-07:00') 
> date 
    Mon Apr 16 2012 04:06:08 GMT+0300 (EEST) 

詳細については、https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Dateを確認してください。

+1

これは私が思っていたよりもはるかに簡単でした...ありがとう – Ian

+6

これは、Firefox 4より前のIE9またはFirefoxの前のバージョンのIEでは動作していません。 – jfriend00

+1

確かに、ISO日付の解析はEcmaScript 5のサポートの一部です。古いブラウザで作業する必要がある場合は、以下のコードを使用する方がよいでしょう。 – eagleflo

4

のjavascriptの最新バージョン(最新のブラウザの一部でv1.85以上)がISOを扱うことができますが、ちょうどこのようDate()コンストラクタに直接文字列を渡すことができるように直接日付:

var jsDate = new Date("2012-04-15T18:06:08-07:00"); 

しかし、古いブラウザ(IE9以前のIEのバージョン、4より前のFirefoxのバージョンなど)はこれをサポートしていません。これらのブラウザのために、あなたがdatejsが好きなのためにこれを行うか、このようにそれを自分で解析できるライブラリーを得ることができ、次のいずれか

var t = "2012-04-15T18:06:08-07:00"; 

function convertDate(t) { 
    var dateRE = /(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)([+\-]\d+):(\d+)/; 
    var match = t.match(dateRE); 
    var nums = [], item, date; 
    if (match) { 
     for (var i = 1; i < match.length; i++) { 
      nums.push(parseInt(match[i], 10)); 
     } 
     if (nums[7] < 0) { 
      nums[8] *= -1; 
     } 
     return(new Date(nums[0], nums[1] - 1, nums[2], nums[3] - nums[6], nums[4] - nums[7], nums[5])); 
    } 
} 

var jsDate = convertDate(t); 

デモここで働い:http://jsfiddle.net/jfriend00/QSgn6/

+0

この文字列では機能しません '2012-04-15T18:06:08-07:00' –

+0

2012-05-28T02:47:59Z –

0

これは私が見た中で最高でありますこれまでそれは、クライアントのデスクトップのタイムゾーンを使用することができ、タイムゾーンの設定をリアルタイムに変更します。

<script type="text/javascript"> 
    //Use: timeZoneConvert("2015-11-03T17:36:20.970"); 
    //Mon Nov 02 2015 17:36:20 GMT-0600 (Central Standard Time) [Date object] 

    //To format string use: timeZoneConvertFormatted("2015-11-03T17:36:20.970") 
    //November 2, 2015 5:36 PM 

    //Works even when I change client timezone to Pacific Standard 
    //Mon Nov 02 2015 15:36:20 GMT-0800 (Pacific Standard Time) 



var months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 
function timeZoneConvert(dateStr) { 
    var d = parse_iso8601(dateStr); 
    //Change (- 360) constant for your server, mine is Central Standard 
    var dTimezoneOffset = new Date(d.getTime() - ((new Date()).getTimezoneOffset() - 360)*60000); 
    return dTimezoneOffset; 
} 

function timeZoneConvertFormatted(dateStr) { 
    return fDateTime(timeZoneConvert(dateStr)); 
} 


function fDateTime(date1) { 
    var date = date1.getDate(); 
    var year = date1.getFullYear(); 
    var month = months[date1.getMonth() + 1]; 
    var h = date1.getHours(); 
    var m = date1.getMinutes(); 
    var ampm = "AM"; 
    if(m < 10) { 
     m = "0" + m; 
    } 
    if(h > 12) { 
     h = h - 12; 
     var ampm = "PM"; 
    } 
    return month + " " + date + ", " + year + " " + h + ":" + m + " " + ampm; 
} 



    var iso8601extended = /^\d{4}(-\d{2}(-\d{2}([T ]\d{2}(:\d{2}(:\d{2})?)?([,.]\d+)?(Z|[+-]\d{2}(:\d{2})?)?)?)?)?$/; 
    var iso8601basic = new RegExp(iso8601extended.source.replace(/[:-]\\d/g, '\\d')); 
    var firstNumber = /[^\d]*(\d+)/g; 
    function parse_iso8601(s) { 
     s = s.replace(/,/g, '.'); 
     var matches = iso8601extended.exec(s); 
     if (matches) { 
      s = s.substr(0, 10).replace(/-/g, '') + s.substr(10).replace(/:/g, ''); 
     } 
     matches = iso8601basic.exec(s); 
     if (!matches) { 
      return null; 
     } 
     var d = new Date(); 
     d.setUTCFullYear(toNumber(matches[0].substring(0, 4))); 
     d.setUTCMonth(matches[1] ? toNumber(matches[1].substr(0, 2)) - 1 : 0); 
     d.setUTCDate(matches[2] ? toNumber(matches[2].substr(0, 2)) : 1); 
     var hours = 0, minutes = 0, seconds = 0, milliseconds = 0; 
     var fraction = matches[6] ? parseFloat(matches[6]) : 0; 
     if (matches[3]) { 
      hours = toNumber(matches[3].substr(1, 2)); 
      if (matches[4]) { 
       minutes = toNumber(matches[4].substr(0, 2)); 
       if (matches[5]) { 
        seconds = toNumber(matches[5].substr(0, 2)); 
        milliseconds = 1000 * fraction; 
       } else { 
        seconds = 60 * fraction; 
       } 
      } else { 
       minutes = 60 * fraction; 
      } 
     } 
     if (!matches[7]) { 
      d.setHours(hours); 
      d.setMinutes(minutes); 
     } else { 
      d.setUTCHours(hours); 
      d.setUTCMinutes(minutes); 
     } 
     d.setUTCSeconds(seconds); 
     d.setUTCMilliseconds(milliseconds); 
     if (matches[7] && matches[7] != 'Z') { 
      offset = toNumber(matches[7].substr(1, 2)) * 60; 
      if (matches[8]) { 
       offset += toNumber(matches[8].substr(0, 2)); 
      } 
      d.setTime(d.getTime() + 60000 * offset * (matches[7].substr(0, 1) == '-' ? 1 : -1)); 
     } 
     return d; 
    } 
    function toNumber(s) { 
     return parseInt(s.replace(/^0+(\d)/, '$1')); 
    } 
</script> 
関連する問題