2017-01-21 16 views
0

JavaScriptで日付文字列をUnixタイムスタンプに変換しています。ここで日付をGMTに変換すると精度は0です

は私が得るものです:

8月26,2015 -

私が取得する必要は何:

8月26,2015 -

このGMTが0に設定されていないため明らかに起こっています。だから本質的に私の時間は
Wed、20 Aug Aug 2015 04:00 :00 GMT

それは本当に変換する必要があります:私はDate.getTime()/1000を使用する前に
水曜日、2015年8月26日00:00:00 GMT

それでは、どのように私は私の日にGMTを取り除くことができますか?

私はこのウェブサイトから数多くの方法を試してみましたが、いずれも効果がありませんでした。注:私はMoment.jsなどのライブラリを使用したくありません。私にお知らせください。

+0

ドゥここかにUTCはJavaScriptを検索してくださいGoogle。ここに重複の重複があります – mplungjan

+0

私は持っていて、どれも働いていません!私はちょうど新しいDate()。getTimezoneOffset()を使用し、ミリ秒で差を取得し、元の日付でそれを引くために60を掛けることを提案する別のものを試しました....まだ動作しません。数秒かかるだけで、実際の例を書くことができますか?私はそれがあなたのためのケーキだと確信しています。 – JohnSnow

+0

ケーキではなく、あなたが正確に何を望んでいるのかまだ分かりません.UTCがあり、ISOの日付があります。これは重複していないのですか? http://stackoverflow.com/questions/9756120/how-do-i-get-a-utc-timestamp-in-javascript – mplungjan

答えて

0

2015年8月26日など、UTC + 0000のタイムゾーン、つまり2015-08-26T00:00:00Zのような日付文字列を解析したいと思います。これを行う最善の方法は、文字列を正しくフォーマットし、信頼できるパーサーを使用することです。

ただし、文字列を解析して再フォーマットする場合は、作成中に日付を作成することもできます。

フォーマットはECMA-262でサポートされていないため、文字列をDateコンストラクタまたはDate.parseで確実に解析することはできません。したがって、その関数または単純な関数にライブラリを使用してください。

タイムゾーンのない日付文字列は、通常、ローカルシステムとして解析されます。つまり、ホストシステムのタイムゾーンを想定しています(ECMAScriptの場合は「2017-01-20」などのISO 8601の日付はUTCとして扱われます)。

文字列がUTCとして解析されたかのように日付を取得するには、ローカルとして解析し、次にタイムゾーンオフセットを減算します。 ECMAScriptのタイムゾーンは、ISO 8601とは反対の意味を持っています。東は-ve、西は+ veです。

Dateオブジェクトは単なる時刻値であり、ホストからのタイムゾーンオフセットを取得することに注意してください。以下は時間値を操作し、それ以外は何もしません(つまり、任意のrespsectでタイムゾーンを「設定」しません)。

ためのECMAScript構文解析のための風変わりな仕様へ

/* Parse a date in format August 26,2015 as local 
 
** @param {string} s - string to parse in MMMM DD, YYYY format 
 
** @returns {Date} 
 
*/ 
 
function parseMdy(s) { 
 
    var months = 'jan feb mar apr may jun jul aug sep oct nov dec'.split(' '); 
 
    var b = s.split(/\W/); 
 
    var month = months.indexOf(b[0].toLowerCase().substr(0,3)); 
 
    return new Date(b[2], month, b[1]); 
 
} 
 

 
// Parse as local 
 
var d = parseMdy('August 26,2015'); 
 
console.log('Local date time : ' + d.toString()); 
 

 
// Subtract timezone 
 
d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); 
 
console.log('Adjusted to +0000: ' + d.toISOString()); 
 
console.log('UNIX time value : ' + (d/1000|0));

日付はISO 8601ごとにフォーマットされている場合は、組み込みのパーサはUTCとして扱います(ただし、これはまだ多少信頼性が低いです):

// August 26,2015 formatted as 2015-08-26 
 
var d = new Date('2015-08-26'); 
 
console.log(d.toISOString()); 
 
console.log(d/1000|0);

関連する問題