Javascript kullanarak belirli bir tarih için dönemi öğrenin


Yanıtlar:


188

Bir Datenesne oluşturabilir ve getTimeonu çağırabilirsiniz :

new Date(2010, 6, 26).getTime() / 1000

13
Tarih oluşturucu için ay bağımsız değişkeni biraz tutarlılıktan yoksundur ve aslında sıfır tabanlıdır. Bu, 7'nin Ağustos olduğu anlamına gelir, bu yüzden 1'i çıkarmanız gerekir :-)
Andy E

6
@Andy - Gerisini tutarken ayları -1 ile dengelemek saçma bir fikir ve JavaScript orada kullanılacaksa bir uzay mekiğini çıldırtabilecek türden bir şey :)
Anurag

7
Muhtemelen gitmesi daha iyi: new Date ("2010-7-26"). GetTime () / 1000, böylece ofsetler hakkında düşünmek zorunda kalmazsınız.
Vincent McNabb

6
@Vincent: new Date("2010-7-26")Internet Explorer'da ayrıştırılmayacak. Date yapıcısı , bir dize iletildiğinde Date.parse () yöntemini kullanır; bu, ECMA-262 3. sürümünde uygulamaya bağlıdır ve sonuç olarak IE'de herkesin bildiği gibi esnek değildir.
Andy E

Olası hataları veya yanlış anlamaları zaman dilimini de belirterek en aza indirebiliriz. En azından Firefox, Opera ve Chrome'un gerçek (Linux-) sürümleri, yeni Tarih ("1 Ocak 1970 GMT + 00: 00, 00:01") gibi bir JavaScript Tarihini somutlaştırmayı destekler; Bu aynı zamanda doğru ay biçimiyle ilgili kafa karışıklığını da azaltır.
Michael Besteck




1

Bazı yanıtlar, JavaScript Date nesnesi için saat dilimindeki varyasyonların yan etkilerini açıklamaz. Bu sizin için bir endişeyse, bu cevabı düşünmelisiniz.

Yöntem 1: Makinenin saat dilimine bağlı

Varsayılan olarak, JavaScript makinenin saat dilimini dikkate alarak bir Tarih döndürür, bu nedenle getTime()sonuç bilgisayardan bilgisayara değişir. Bu davranışı çalışırken kontrol edebilirsiniz:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

Epoch'un saat diliminizi dikkate almasından bu yana geçen zamanı gerçekten istiyorsanız, bu bir sorun değildir. Dolayısıyla, Epoch'tan bu yana geçerli Tarih için veya hatta bilgisayarın saat dilimine bağlı olarak belirli bir Tarih için zaman almak istiyorsanız, bu yöntemi kullanmaya devam etmekte özgürsünüz.

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

Yöntem 2: Makinenin saat diliminden bağımsız

Bununla birlikte, saat dilimindeki varyasyonların turunu almak ve Epoch'tan itibaren UTC'de belirli bir Tarih için (yani, saat diliminden bağımsız) zaman almak istiyorsanız, Date.UTCyöntemi kullanmanız veya tarihi saat diliminizden UTC'ye kaydırmanız gerekir :

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

Bu nedenle, bu yöntemi kullanarak (veya alternatif olarak farkı çıkararak) sonuç şöyle olmalıdır:

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

IMO, ne yaptığınızı bilmiyorsanız (yukarıdaki nota bakın), makineden bağımsız olduğu için Yöntem 2'yi tercih etmelisiniz .


Notu bitir

Bu yanıttaki öneriler ve Date.UTCbelirli bir tarih / saat olmadan işe yaramadığından, alternatif yaklaşımı kullanmaya ve bunun gibi bir şey yapmaya meyilli olabilirsiniz:

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

Bu herhangi bir anlam ifade etmiyor ve muhtemelen YANLIŞ (tarihi değiştiriyorsunuz). Bunu yapmamanın farkında olun. Epoch'tan bu yana geçerli tarih VE SAAT'ten bu yana zaman almak istiyorsanız, büyük olasılıkla Yöntem 1'i kullanıyorsunuz .


1

Date.parse()yöntem bir tarihin dize gösterimini ayrıştırır ve o zamandan beri geçen milisaniye sayısını döndürür January 1, 1970, 00:00:00 UTC.

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

Daha fazlasını keşfedin: Date.parse ()


0
Number(new Date(2010, 6, 26))

Yukarıdaki şeylerle aynı şekilde çalışır. Saniyeye ihtiyacın varsa unutma/ 1000

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.