日付をタイムスタンプに変換する方法は?


165

日付をタイムスタンプに変換したいのですが、私の入力は26-02-2012です。使った

new Date(myDate).getTime();

NaNと書かれています。これを変換する方法を教えてください。



:あなたはdate.jsライブラリを見撮りたいかもしれdatejs.com
rsbarro

1
Date(myDate).getTime()(コードとしてマークアップしたもの)を使用しましたか、それともその前にある「新しい」という言葉はコードの一部であることを意味していますか?より多くの努力を注ぐほど、より良い答えが得られます。
TJクラウダー2012年

@rsbarro:もうメンテナンスされていないようです(そして未解決のバグがあります)。ただし、MomentJSはかなり良いようです。
TJクラウダー2012年

@TJCrowder私はdate.jsを使用しましたが、それは私が必要としているもののために機能しましたが、あなたは正しいです。momentjsをチェックします。ありがとう!
rsbarro

回答:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

更新:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

デモ(Chrome、FF、Opera、IE、Safariでテスト済み)。


残念ながら、これはSafari5では戻りませんので機能しませんNaN。サファリでは、他の可能なコンストラクタを使用する必要がありnew Date(year, month, day);、この例については、:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere

13
日付文字列を「ヨーロッパ」形式から「アメリカ」形式に変換する代わりに、ISO 8601形式(YYYY-MM-DD)に変換することをお勧めしますDate()
Walter Tross、2014

3
注:new Date(newDate).getTime()タイムスタンプはミリ秒単位で生成されます。
h7r 2014

3
秒の使用: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

この関数を試してみてください。Date.parse()メソッドを使用しており、カスタムロジックを必要としません。

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));


24

このリファクタリングされたコードはそれを行います

let toTimestamp = strDate => Date.parse(strDate)

これは、ie8-を除くすべての最新ブラウザーで機能します。


10

ここには2つの問題があります。まず、日付のインスタンスでのみgetTimeを呼び出すことができます。新しい日付を角かっこで囲むか、変数に割り当てる必要があります。

次に、適切な形式で文字列を渡す必要があります。

作業例:

(new Date("2012-02-26")).getTime();

1
日付を角括弧で囲む必要はありません。適切な文字列形式のみが必要です。
maswerdna

5

あなたは自分の日付の数字と変更を逆にする必要がある-,

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

あなたの場合:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

PS UKロケールはここでは関係ありません。


その日付形式も無効であり、ブラウザ間やロケール間で確実に機能しません(たとえば、私がChromeでUKロケールを使用している場合は機能しません)。形式を提案する場合は、実際に文書化されている形式を提案してください。
TJクラウダー2012年

サンプルはdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/…から取得しています。ひもを片付けるのを忘れた。今では動作します。
antonjs 2012年

2
さて、少なくとも今のところ、上記のコードは無効な日付形式を使用していません。2つの理由により、誤った日付を示しているだけです。上記で、2014年3月2日の日付を定義しました(フィールドオーダーがめちゃくちゃになっています)。フィールドが正しい順序である場合は、2012年3月 26日の日付を定義します(月の値はゼロから始まります)。しかし、OPには一連の数値ではなく文字列があるため、これらの問題に対処しても、それほど有用ではありません。
TJクラウダー2012年

@TJクラウダーあなたの提案をありがとう。文字列を数値に変換すると言ったように、コードを修正しました。メルシー。
antonjs 2012年

2
最初のコード例はまだ間違っており、一部のエンジンではNumbera 0で始まる文字列での使用は問題がparseIntあります- 基数を使用して指定します。
TJクラウダー2012年

5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}

4

(ISO)日付をUnixタイムスタンプに変換するにはに、タイムスタンプが必要以上に3文字長くなったので、私の年は約50kでした...

私はそれを1000で割る必要がありました: new Date('2012-02-26').getTime() / 1000


3

読み取り可能なタイムスタンプを次の形式で取得したい場合は、 yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

使用例:バックアップファイルの拡張子。 /my/path/my.file.js.20190220


3

現在のタイムスタンプを探してここに来た場合

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

文字列は、Dateオブジェクトが処理するように指定されている形式ではありません。自分で解析するか、MomentJSなどの日付解析ライブラリを使用するか(現在のところ、私の知る限りでは維持されていません)、DateJSを実行するか、2012-02-29問い合わせる前に正しい形式(例:)にマッサージする必要があります。Date、解析する。

取得する理由NaNnew Date(...)無効な文字列を処理するように要求するDateと、無効な日付に設定されたオブジェクトがnew Date("29-02-2012").toString()返されます(return "Invalid date")。getTime()この状態で日付オブジェクトを呼び出すと、が返されますNaN


@benvds:よろしくお願いします。「また、それはDOMを破壊しない」というコメントは少し奇妙ですが...彼らが意味したのは、Dateオブジェクトを変更しない(DOMとは何の関係もない)ことでした。
TJクラウダー

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

回答は他の開発者によって提供されていますが、私自身の方法では、次のようにユーザー定義関数を作成せずにその場でこれを行うことができます。

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.