moment.jsを使用して日付をUTCに変換します


95

おそらくこれに対する簡単な答えですが、moment.jsがUTC日時をミリ秒単位で返すようにする方法を見つけることができないようです。これが私がしていることです:

var date = $("#txt-date").val(),
    expires = moment.utc(date);

私が間違っていることについて何か考えはありますか?

回答:


101

これはドキュメントにあります。瞬間のようなライブラリがあるので、ドキュメント全体を読むことをお勧めします。それは本当に重要です。

入力テキストがユーザーの現地時間で入力されていると仮定します。

 var expires = moment(date).valueOf();

ユーザーが実際にUTCの日付/時刻を入力するように指示された場合は、次のようにします。

 var expires = moment.utc(date).valueOf();

22
編集済み-「簡単に」削除。:)
マットジョンソン-パイント2015

6
また、タイムゾーンのある瞬間の日時がすでにある場合、それをUTCに変換するにはどうすればよいですか?
アレックス


2
それはうまくいきません。これは、日付自体ではなく、日付で使用されるメソッドのみを変更します。
コリーン2015年

2
@ Colleen-はい。ただし、通常は.format()、UTC値を出力するなどのメソッドの1つを呼び出します。aはすでにUTCタイムスタンプを追跡しているため、内部の日付値自体を変更することはできませんDate。UTCを発行するか現地時間を発行するかを決定するのは、常に呼び出されるメソッドだけです。その点でモーメントは同じです。
マットジョンソン-パイント2015年

53

私はこの方法を使用し、それは機能します。ValueOfは私には機能しません。

moment.utc(yourDate).format()

2
これはドキュメントに従って機能します。現地時間をUTCに変換します。
Kishor Pawar 2017

1
ここには何か怪しいものがあります。私はmoment.jsver。を使用しています。2.17.1そして「yourdate」が「2017-10-14T21:00:00Z」(en-us)の場合、上記のスニペットはまったく同じ結果「2017-10-14T21:00:00Z」を返しますが、明らかにそうではありません私はgmt + 3にいるのでutc。正しい結果は「2017-10-15T00:00:00 + 03:00」であり、これは「moment(yourDate).format()」を介して取得します。
XDS 2017年

14

現在: moment.js version 2.24.0

ローカルの日付入力があるとしましょう。これは、dateTimeまたはTime入力をUTCに変換する適切な方法 です。

var utcStart = new moment("09:00", "HH:mm").utc();

または日付を指定する場合

var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();

ご覧のとおり、結果の出力はUTCで返されます。

//You can call the format() that will return your UTC date in a string 
 utcStart.format(); 
//Result : 2019-06-24T13:00:00 

ただし、以下のようにこれを行うと、UTCに変換されません

var myTime = new moment.utc("09:00", "HH:mm"); 

入力をUTC時間に設定しているだけで、myTimeがUTCであることに言及しているようです、....出力は9:00になります


3
moment.utc(date).format(...); 

以来、行く方法です

moment().utc(date).format(...);

変な振る舞いをしますか...


1
の奇妙な振る舞いについて詳しく教えていただけますmoment().utc(date).format(...)か?
フリーマンラムダ

2
動作は奇妙ではありません、それらは異なる方法です。1つ目moment.utc(date)は、を解析するためのものdateです。2つ目moment().utc(date)は、現在の時刻()を操作するためのものであり、この場合はパラメーターを予期しないためmoment()dateパラメーターは.utc()役に立ちません。
CodingHamster 2017

2

これは私のために働いた。他の人はそれが役に立つと思うかもしれません。

//日付= 2020-08-31T00:00:00Z私はデンマークにいます(タイムゾーンは+2時間です)

moment.utc(moment(date).utc())。format()// 2020-08-30T22:00:00Zを返します


1

他のすべてが失敗した場合は、ローカルオフセットの逆数で再初期化してください。

var timestamp = new Date();
var inverseOffset = moment(timestamp).utcOffset() * -1;
timestamp = moment().utcOffset( inverseOffset  );

timestamp.toISOString(); // This should give you the accurate UTC equivalent.

これは機能しません。どのような作業が設定されてんkeepOffsetのように、パラメータをtrueにmoment(timestamp).toISOString(true)
クリス・ヘインズ

1

ここでは、日付オブジェクトを渡し、UTC時間に変換しています。

$.fn.convertTimeToUTC = function (convertTime) {
   if($(this).isObject(convertTime)) {
        return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss");
    }
};
// Returns if a value is an object
$.fn.isObject =  function(value) {
    return value && typeof value === 'object';
};


//you can call it as below
$(this).convertTimeToUTC(date);

1

これが答えになります:

moment.utc(moment(localdate)).format()
localdate = '2020-01-01 12:00:00'

moment(localdate)
//Moment<2020-01-01T12:00:00+08:00>

moment.utc(moment(localdate)).format()
//2020-01-01T04:00:00Z

0

ここでmoment.jsのこのドキュメントを読んでください。以下の例と出力を参照してください。ここでは、GMT時間を現地時間に変換し(私のゾーンはISTです)、次に現地時間をGMTに変換します。

// convert GMT to local time
console.log('Server time:' + data[i].locationServerTime)
let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to local time:' + data[i].locationServerTime)

// convert local time to GMT
console.log('local time:' + data[i].locationServerTime)
let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to server time:' + data[i].locationServerTime)

出力は

Server time:2019-12-19 09:28:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to local time:2019-12-19 14:58:13
local time:2019-12-19 14:58:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to server time:2019-12-19 09:28:13

-1

比較してミリ秒を取得するものは必要ありませんか?

例えば:

let enteredDate = $("#txt-date").val(); // get the date entered in the input
let expires = moment.utc(enteredDate); // convert it into UTC

これで、UTCで有効期限が切れます。これで、UTCで「現在」の日付を取得して比較できます。

var rightNowUTC = moment.utc(); // get this moment in UTC based on browser
let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff
let remainingTimeInMls = duration.asMilliseconds();

moment.valueOf()そして(new Date()).getTime()両方のUTC(それが標準だ)1970年1月1日からのミリ秒を返す
Drenai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.