javascript - timestamp格式 - utc時間戳




你如何獲得JavaScript的時間戳? (20)

短而時髦:

+ new Date()

plus這樣的一元運算符會觸發Date對像中的valueOf方法,並返回時間戳(不做任何更改)。

細節:

在幾乎所有當前瀏覽器上,您都可以使用Date.now()來獲取UTC時間戳(以毫秒為單位) ; 一個值得注意的例外是IE8及更早版本(參見兼容性表 )。

不過,你可以很容易地為此做一個墊片:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

要以為單位獲取時間戳,您可以使用:

Math.floor(Date.now() / 1000)

或者您也可以使用:

Date.now() / 1000 | 0

哪個應該稍微快一點,但也不太可讀(也見這個答案 )。

我建議使用Date.now() (兼容墊片)。 它稍微好一些,因為它更短並且不會創建新的Date對象。 但是,如果您不想要填充程序和最大兼容性,則可以使用“舊”方法以毫秒為單位獲取時間戳:

new Date().getTime()

然後您可以將其轉換為秒,如下所示:

Math.round(new Date().getTime()/1000)

您還可以使用我們在上面顯示的valueOf方法:

new Date().valueOf()

時間戳以毫秒為單位

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());

如何在JavaScript中獲取時間戳?

與Unix的時間戳類似的東西,即代表當前時間和日期的單個數字。 無論是數字還是字符串。


JavaScript中的日期本機對像是我們獲取所有時間數據的方式。

在JavaScript中要小心,時間戳取決於客戶端計算機設置,因此它不是100%準確的時間戳。 為了獲得最佳結果,您需要從服務器端獲取時間戳。

無論如何,我的首選方式是使用香草。 這是在JavaScript中執行此操作的常用方法:

Date.now(); //return 1495255666921

在MDN中,它提到如下:

Date.now()方法返回自1970年1月1日00:00:00 UTC以來經過的毫秒數。
因為now()是Date的靜態方法,所以總是將它用作Date.now()。

如果您使用的是ES5以下的版本, Date.now(); 不起作用,你需要使用:

new Date().getTime();


Date.getTime()方法可以使用一點調整:

getTime方法返回的值是自1970年1月1日00:00:00 UTC以來的毫秒數。

將結果除以1000以獲取Unix時間戳,必要時為floor

(new Date).getTime() / 1000

Date.valueOf()方法在功能上等同於Date.getTime() ,這使得可以在date對像上使用算術運算符來實現相同的結果。 在我看來,這種方法會影響可讀性。


我在這個答案中提供了多個解決方案和描述。 如果有任何不清楚的地方,請隨時提問
PS:遺憾的是有人將此合併到最佳答案而沒有給予信任。

快速又髒的解決方案:

Date.now() /1000 |0

警告 :它可能在2038年中斷並且如果你執行|0魔術則返回負數。 使用Math.floor()代替那個時間

Math.floor()解決方案:

Math.floor(Date.now() /1000);

Derek朕會功夫的一些討厭的選擇取自下面的評論這個答案:

new Date/1e3|0

Polyfill得到Date.now()工作:

要在IE中使用它,你可以這樣做(來自MDN Polyfill):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

如果您不關心星期/夏令時的年/日,您可以將其剝離並在2038年後使用它:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

它的一些輸出結果:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

當然它會打破夏令時但是根據你正在構建的內容,如果你需要在int32在2038年中斷之後對時間戳進行二進制操作,這可能對你有用。

這也將返回負值,但只有當您運行代碼的PC的用戶將PC的時鐘至少更改為去年12月31日時。

如果您只想知道從代碼運行到第一次的相對時間,您可以使用以下內容:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

如果您正在使用jQuery,您可以使用$.now() ,如jQuery的Docs中所述,這使得$.now()過時,因為$.now()內部執行相同的操作:( (new Date).getTime()

如果你對jQu​​ery的版本感到高興,請考慮提出this答案,因為我自己並沒有找到它。

現在對|0做的一個小小的解釋:

通過提供| ,你告訴解釋器做二進制OR操作。 位操作需要絕對數字,將十進制結果從Date.now() / 1000轉換為整數。

在轉換期間,刪除小數,導致與使用Math.floor()但使用較少代碼的結果相同。

但要注意:它會將64位雙精度轉換為32位整數。 這會在處理大量數據時導致信息丟失。 由於32位整數溢出,時間戳將在2038年後中斷。

有關Date.now更多信息,請Date.now以下鏈接: MDN


一個我還沒有看到的

Math.floor(Date.now() / 1000); // current time in seconds

另一個我還沒有看到的是

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

代碼Math.floor(new Date().getTime() / 1000)可以縮短為new Date / 1E3 | 0 new Date / 1E3 | 0

考慮跳過直接的Date.getTime()調用並使用| 0 | 0作為Math.floor()函數的替代。 記住1E31000的較短等效值(大寫E優於小寫,表示1E3為常數)也是很好的。

因此,您將獲得以下信息:

var ts = new Date / 1E3 | 0;

console.log(ts);


任何瀏覽器都不支持Date.now,您可以使用它來獲取當前日期時間:

currentTime = Date.now() || +new Date()

前幾天,我學會了一種非常酷的方法,將給定的Date對象轉換為來自JQuery Cookie源代碼的Unix時間戳。

這是一個例子:

var date = new Date();
var timestamp = +date;

只是為了加起來,這是一個在Javascript中返回時間戳字符串的函數。 例如:下午15:06:38

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

如果想要一種在Node.js中生成時間戳的基本方法,這種方法很有效。

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

我們的團隊正在使用它來在本地主機環境中破解緩存。 輸出為/dist/css/global.css?v=245521377 ,其中245521377hrtime()生成的時間戳。

希望這有幫助,上面的方法也可以工作,但我發現這是我們在Node.js中最簡單的方法。


對於lodashunderscore用戶,請使用_.now

var timestamp = _.now(); // in milliseconds

我喜歡這個,因為它很小:

+new Date

我也喜歡這個,因為它與現代瀏覽器一樣短,並且與現代瀏覽器兼容,超過500人投票表示它更好:

Date.now()

我強烈推薦使用moment.js 。 要獲得自UNIX紀元以來的毫秒數,請執行此操作

moment().valueOf()

要獲得自UNIX紀元以來的秒數,請執行此操作

moment().unix()

你也可以像這樣轉換時間:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

我一直這樣做。 沒有雙關語。

要在瀏覽器中使用moment.js

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

有關更多詳細信息,包括安裝和使用MomentJS的其他方法,請參閱其docs


有時我需要在xmlhttp調用的對像中,所以我喜歡這樣。

timestamp : parseInt(new Date().getTime()/1000, 10)

這似乎有效。

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

這是一個生成時間戳的簡單函數,格式為:mm / dd / yy hh:mi:ss

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())));
}

除了其他選項,如果你想要一個dateformat ISO,你可以直接得到它

console.log(new Date().toISOString());


console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


var time = Date.now || function() {
  return +new Date;
};

time();




unix-timestamp