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);
ドゥここかにUTCはJavaScriptを検索してくださいGoogle。ここに重複の重複があります – mplungjan
私は持っていて、どれも働いていません!私はちょうど新しいDate()。getTimezoneOffset()を使用し、ミリ秒で差を取得し、元の日付でそれを引くために60を掛けることを提案する別のものを試しました....まだ動作しません。数秒かかるだけで、実際の例を書くことができますか?私はそれがあなたのためのケーキだと確信しています。 – JohnSnow
ケーキではなく、あなたが正確に何を望んでいるのかまだ分かりません.UTCがあり、ISOの日付があります。これは重複していないのですか? http://stackoverflow.com/questions/9756120/how-do-i-get-a-utc-timestamp-in-javascript – mplungjan