web-dev-qa-db-ja.com

UTCの日付時刻をローカルの日付時刻に変換する

サーバーから私はこのフォーマットの日時変数を得ます:6/29/2011 4:52:48 PMそしてそれはUTC時間です。 JavaScriptを使用して現在のユーザーのブラウザの時間に変換したいです。

JavaScriptまたはjQueryを使用してこれをどのように行うことができますか?

270
Amr Elgarhy

Javascriptで日付に変換する前に、文字列に 'UTC'を追加します。

var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
326
digitalbath

私の視点では、サーバーは常に一般的な場合に 標準化されたISO 8601フォーマット で日付時刻を返すべきです。

詳細はこちら:

この場合、サーバーは'2011-06-29T16:52:48.000Z'を返します。これはJS Dateオブジェクトに直接送られます。

var utcDate = '2011-06-29T16:52:48.000Z';  // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);

localDateは正しい現地時間になり、私の場合は2時間後(DK時間)になります。

あなたがサーバーにどんなフォーマットを期待するかに矛盾しない限り、あなたは実際にこのすべての解析をする必要はない。

93
Hulvej

これは普遍的な解決策です。

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);

    var offset = date.getTimezoneOffset() / 60;
    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;   
}

使用法:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));

クライアントのローカル設定に基づいて日付を表示します。

date.toLocaleString();
86
Adorjan Princz

クライアントの(UTC)オフセット(分単位)を取得する必要があります。

var offset = new Date().getTimezoneOffset();

そして、サーバーから取得した時刻にコレスポンデントを追加または削除します。

お役に立てれば。

33
Nobita

この機能を頭に入れてください。

<script type="text/javascript">
function localize(t)
{
  var d=new Date(t+" UTC");
  document.write(d.toString());
}
</script>

次に、ページの本文内の日付ごとに以下を生成します。

<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>

GMTとタイムゾーンを削除するには、次の行を変更します。

document.write(d.toString().replace(/GMT.*/g,""));
19
Ben Bryant

私にとって上記の解決策はうまくいきませんでした。

IEを使用すると、UTCからローカルへの日時変換は少し面倒です。私にとっては、Web APIの日時は'2018-02-15T05:37:26.007'で、現地のタイムゾーンに従って変換したいので、以下のコードをJavaScriptで使用しました。

var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
14
PramodB

ここに投稿された他のいくつかを試してみると、良い結果は得られませんでしたが、これは私にとってうまくいったようです。

convertUTCDateToLocalDate: function (date) {
    return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(),  date.getHours(), date.getMinutes(), date.getSeconds()));
}

そしてこれは、Local DateからUTCまで、反対の方法で機能します。

convertLocalDatetoUTCDate: function(date){
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
10
Uniphonic

UTCと現地時間変換に使用してください。

//Covert datetime by GMT offset 
//If toUTC is true then return UTC time other wise return local time
function convertLocalDateToUTCDate(date, toUTC) {
    date = new Date(date);
    //Local time converted to UTC
    console.log("Time: " + date);
    var localOffset = date.getTimezoneOffset() * 60000;
    var localTime = date.getTime();
    if (toUTC) {
        date = localTime + localOffset;
    } else {
        date = localTime - localOffset;
    }
    date = new Date(date);
    console.log("Converted time: " + date);
    return date;
}
9
user3560410

moment.jsを使っても構わず、UTCで過ごしている時間がある場合は、次のコマンドを使用してください。

moment.utc('6/29/2011 4:52:48 PM').toDate();

あなたの時間がutcではなく、あなたが知っている他のどのロケールでもない場合は、次のようにしてください。

moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY', 'fr').toDate();

あなたの時間がすでに現地時間である場合は、次のようにしてください。

moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY');
8
adnan kamili

これは私のために働く:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
    return newDate;   
}
8
Molp Burnbright

Mattの答えには、Date()と変換する必要がある日付時刻の間で夏時間が異なる可能性があるという事実が欠けています。これが私の解決策です。

    function ConvertUTCTimeToLocalTime(UTCDateString)
    {
        var convertdLocalTime = new Date(UTCDateString);

        var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;

        convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset ); 

        return convertdLocalTime;
    }

そしてデバッガでの結果:

UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
7
MaurGi

最後にタイムゾーン、この場合は 'UTC'を追加します。

theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));

その後、 toLocale ()* 関数ファミリを使用して日付を正しいロケールで表示します。

theDate.toLocaleString();  // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString();  // "9:52:48 AM"
theDate.toLocaleDateString();  // "6/29/2011"
7
pabloa98

これはAdorjan Princの答えに基づく単純化されたソリューションです。

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date);
    newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return newDate;
}

使用法:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
7
huha

私にとっては最も単純な

datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());

(私は最初の行で十分だと思いましたが、数時間のうちにずれているタイムゾーンがあります)

4
mizuki nakeshu

YYYY-MM-DD hh:mm:ssフォーマットを使う:

var date = new Date('2011-06-29T16:52:48+00:00');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"

YYYY-MM-DD hh:mm:ss形式から変換する場合は、日付が ISO 8601形式 に従っていることを確認してください。

Year: 
    YYYY (eg 1997)    
Year and month: 
    YYYY-MM (eg 1997-07)
Complete date: 
    YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
    YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)    
Complete date plus   hours, minutes and seconds:
    YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)    
Complete date plus hours, minutes, seconds and a decimal fraction of a second
    YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) where:

YYYY = four-digit year
MM   = two-digit month (01=January, etc.)
DD   = two-digit day of month (01 through 31)
hh   = two digits of hour (00 through 23) (am/pm NOT allowed)
mm   = two digits of minute (00 through 59)
ss   = two digits of second (00 through 59)
s    = one or more digits representing a decimal fraction of a second
TZD  = time zone designator (Z or +hh:mm or -hh:mm)

重要な注意事項

  1. 日付と時刻をTで区切る必要があります。一部のブラウザではスペースが機能しません
  2. このフォーマット+hh:mmを使用してタイムゾーンを設定する必要があります。タイムゾーンに文字列を使用すると(例: 'UTC')、多くのブラウザでは機能しません。 +hh:mmは、UTCタイムゾーンからのオフセットを表します。
3
Gudradain

JSON日付文字列(C#でシリアル化されたもの)は、「2015-10-13T18:58:17」のようになります。

角度では、(Hulvejに続いて)localdateフィルタを作ります。

myFilters.filter('localdate', function () {
    return function(input) {
        var date = new Date(input + '.000Z');
        return date;
    };
})

次に、次のように現地時間を表示します。

{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
3
James Howey

これを答えるならばここでは、特定のid要素に変換された時間を表示し、日付フォーマット文字列yyyy-mm-ddを適用する関数が欲しいと思います。

function convertUTCDateToLocalDate(date1, ids) 
{
  var newDate = new Date();
  var ary = date1.split(" ");
  var ary2 = ary[0].split("-");
  var ary1 = ary[1].split(":");
  var month_short = Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  newDate.setUTCHours(parseInt(ary1[0]));
  newDate.setUTCMinutes(ary1[1]);
  newDate.setUTCSeconds(ary1[2]);
  newDate.setUTCFullYear(ary2[0]);
  newDate.setUTCMonth(ary2[1]);
  newDate.setUTCDate(ary2[2]);
  ids = document.getElementById(ids);
  ids.innerHTML = " " + newDate.getDate() + "-" + month_short[newDate.getMonth() - 1] + "-" + newDate.getFullYear() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds();
            }

私は答えがすでに受け入れられていることを知っていますが、私はここでグーグルの原因を得て、私は受け入れられた答えからインスピレーションを得ることで解決しました。

2
Nisarg Desai

@Adorojan'sの答えはほぼ正しいです。ただし、ブラウザの日付がGMTより早い場合はオフセット値が負になるため、オフセットの追加は正しくありません。以下は私が付属し、私のために完璧に働いている解決策です:

// Input time in UTC
var inputInUtc = "6/29/2011 4:52:48";

var dateInUtc = new Date(Date.parse(inputInUtc+" UTC"));
//Print date in UTC time
document.write("Date in UTC : " + dateInUtc.toISOString()+"<br>");

var dateInLocalTz = convertUtcToLocalTz(dateInUtc);
//Print date in local time
document.write("Date in Local : " + dateInLocalTz.toISOString());

function convertUtcToLocalTz(dateInUtc) {
                //Convert to local timezone
                return new Date(dateInUtc.getTime() - dateInUtc.getTimezoneOffset()*60*1000);
}
2
Joe

@digitalbathの回答に基づいて、UTCタイムスタンプを取得し、指定されたDOM要素の現地時間を表示するための小さな関数です(この最後の部分にjQueryを使用)。

https://jsfiddle.net/moriz/6ktb4sv8/1/

<div id="eventTimestamp" class="timeStamp">
   </div>
   <script type="text/javascript">
   // Convert UTC timestamp to local time and display in specified DOM element
   function convertAndDisplayUTCtime(date,hour,minutes,elementID) {
    var eventDate = new Date(''+date+' '+hour+':'+minutes+':00 UTC');
    eventDate.toString();
    $('#'+elementID).html(eventDate);
   }
   convertAndDisplayUTCtime('06/03/2015',16,32,'eventTimestamp');
   </script>
1
Moriz

私にとっては、これはうまくいきます

if (typeof date === "number") {
  time = new Date(date).toLocaleString();
  } else if (typeof date === "string"){
  time = new Date(`${date} UTC`).toLocaleString();
}
0
C.Lee

UTCエポックを取り、それをクライアントシステムのタイムゾーンに変換してd/m/Y H:i:sの形式で返す(PHP date関数のような)Niceという小さなスクリプトを書きました。

getTimezoneDate = function ( e ) {

    function p(s) { return (s < 10) ? '0' + s : s; }        

    var t = new Date(0);
    t.setUTCSeconds(e);

    var d = p(t.getDate()), 
        m = p(t.getMonth()+1), 
        Y = p(t.getFullYear()),
        H = p(t.getHours()), 
        i = p(t.getMinutes()), 
        s = p(t.getSeconds());

    d =  [d, m, Y].join('/') + ' ' + [H, i, s].join(':');

    return d;

};
0
John Bell

moment.js ファイルを使用して実行できます。

タイムゾーンの場所について言及しているだけです。

例:日時をアジア/コルカタのタイムゾーンに変換する場合、 moment.js から取得したタイムゾーンの場所の名前を指定するだけです

var UTCDateTime="Your date obtained from UTC";
var ISTleadTime=(moment.tz(UTCDateTime, "Africa/Abidjan")).tz("Asia/Kolkata").format('YYYY-MM-DD LT');
0
REvathY M

momentjs を使用することができます、moment(date).format()は常に現地日付で結果を返します。

ボーナス 、好きなようにフォーマットできます。例えば。

moment().format('MMMM Do YYYY, h:mm:ss a'); // September 14th 2018, 12:51:03 pm
moment().format('dddd');                    // Friday
moment().format("MMM Do YY"); 

詳細については、 Moment jsのWebサイト を参照してください。

0
Shivendra Gupta