Bir web sitesinde mevcut yılı yazdırmanın en kısa yolu


232

Altbilgide sabit olarak kodlanmış telif hakkı tarihi olan birkaç yüz statik HTML sayfasını güncellemem gerekiyor. Her yıl otomatik olarak güncellenecek bazı JavaScript ile değiştirmek istiyorum.

Şu anda kullanıyorum:

<script type="text/javascript">var year = new Date();document.write(year.getFullYear());</script>

Bu mümkün olduğunca kısa mı?

Yanıtlar:


542

İşte alabileceğim en kısa şey:

<script>document.write(new Date().getFullYear())</script>

Bu, karşılaştığım tüm tarayıcılarda işe yarar.

Oraya nasıl geldim:

  • getFullYearDoğrudan yeni oluşturulan bir çağrı yapabilirsiniz Date, bir değişkene gerek yok. new Date().getFullYear()biraz tuhaf görünebilir, ancak güvenilir: new Date()bölüm önce yapılır, sonra .getFullYear().
  • typeJavaScript'i varsayılan olarak bıraktığınız için bırakabilirsiniz ; bu, HTML5 spesifikasyonunun bir parçası olarak bile belgelenmiştir; bu, muhtemelen bu durumda tarayıcıların zaten ne yaptığını yazıyor olabilir.
  • Ekstra kaydedilmiş bir karakter için noktalı virgülün sonunda bırakabilirsiniz, çünkü JavaScript'te "otomatik noktalı virgül ekleme", normalde hor gördüğüm ve korkuttuğum bir özellik vardır , ancak bu özel kullanım durumunda yeterince güvenli olmalıdır.

Bunun yalnızca JavaScript'in etkin olduğu tarayıcılarda çalıştığını belirtmek önemlidir. İdeal olarak, bu sed, yılda bir kez çevrimdışı bir toplu iş ( * nix, vb. Üzerinde komut dosyası) olarak daha iyi ele alınacaktır , ancak JavaScript çözümünü istiyorsanız, bunun olabildiğince kısa olduğunu düşünüyorum. (Şimdi gittim ve kaderi baştan çıkardım.)


1
2019'da tüm sayfa içeriğini yeniden yazar. bir şey mi kaçırıyorum?
Systems Rebooter

2
@SystemsRebooter - Sadece kullanabilir document.write(a, yukarıda gösterildiği gibi, ilk ayrıştırma aşamasında hat içi içerik <script>...</script>etiket - ya da bir de .jsbir yüklü dosya scriptetiketi olmadan defer ya da async). Sayfa tamamen ayrıştırıldığında, belge akışı kapatılır ve document.writeyeniden açılır - belge tamamen yenisiyle değiştirilir. Ana ayrıştırma tamamlandıktan sonra bir yıl eklemek isterseniz, DOM'yi kullanmak istersiniz. (Bu bir değişiklik değil, her zaman böyle olmuştur.)
TJ Crowder

44

TJ'nin cevabı mükemmel, ancak HTML'imin zaten oluşturulduğu ve document.write betiğinin tüm sayfa içeriğinin üzerine sadece tarih yılı ile yazacağı bir senaryoya girdim.

Bu senaryo için, aşağıdaki kodu kullanarak mevcut öğeye bir metin düğümü ekleyebilirsiniz:

<div>
    &copy;
    <span id="copyright">
        <script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
    </span>
    Company Name
</div>

Evet - iyi bir çözüm! Komut dosyası snippet'ini, kapanış gövdesi etiketinden hemen önce veya html gövdesinin sonundaki diğer j'lerinize taşımanızı öneririz.
Christian Michael

createTextNode()<br>HTML ile nasıl bir düğüm oluşturuyorsunuz gibi html'yi yorumlamıyor mu?
rubo77

19

Geleceğe bir zaman aralığı dahil etmek istiyorsanız, gelecek yıl şu yıl görünecek şekilde geçerli yıl (örneğin 2017) başlangıç ​​yılı olarak: “© 2017-2018, Company.”, Ardından aşağıdaki kodu kullanın . Her yıl otomatik olarak güncellenir:

&copy; Copyright 2017<script>new Date().getFullYear()>2017&&document.write("-"+new Date().getFullYear());</script>, Company.

© Telif Hakkı 2017-2018, Company.

Ancak, ilk yıl geçmişse, en kısa kod şu şekilde yazılabilir:

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.

13
<script type="text/javascript">document.write(new Date().getFullYear());</script>

1
Sadece <script> 'in daha kısa olduğunu biliyorum (diğer cevaba bakınız), ama onun daha güncel ve her zaman çalışacaktır. Aslında, WP'de diğerinin işe yaramayacağı bir örneğim vardı, ama bu sorun değildi. WP'nin neden bu konuda bir sorun çıkaracağından emin değilim ... Bugünlerde; sonunda ve komut dosyası varsayılan olarak js, ancak yine de.
Malachi

9

JS çözümü harika çalışıyor ama bir sunucu tarafı çözümü tavsiye ediyorum. Kontrol ettiğim sitelerin bazılarında tüm sayfanın boşlaşması ve yalnızca yılın arada bir görülmesi sorunu vardı.

Bunun nedeni oldu document.write aslında tüm belge üzerinde yazdı.

Arkadaşımdan bir sunucu tarafı çözümü uygulamasını istedim ve bu onun için çalıştı. Php basit kod

<?php echo date('Y'); ?>

Zevk almak!


1
Çözümünüz çok basit, ama sorun şu ki, JavaScript
Mo.2

2
Haha! Bunu gönderdiğimde çözüm zaten verildi. Yine de insanların başka yollar olduğunu bilmesini istedim! Umarım gelecekte benim gibi birine yardımcı olur!
Arcanyx

Aynı düşünceye sahip bir çözüm olmadığında alternatif görünmemiz gerektiğine katılıyorum. 😉 aşağı seçimler konusunda dikkatli olun
Mo

Ya sunucu tarafı çözümü Node.js ve dolayısıyla JavaScript ise?
rorymorris89

2
Sayfa boş kalırsa, bu document.writeDOM zaten yüklendikten sonra kullanılmış demektir . Çözüm, document.writetüm DOM yüklerinden sonra kullanmamak veya daha da iyisi hiç kullanmamaktır document.write.
user4642212

8

İşte hem AD hem de BC'de çalışan en kısa en sorumlu sürüm.

[davul ruloları ...]

<script>document.write(Date().split` `[3])</script>

Bu kadar. 6 Bayt kabul edilen yanıttan daha kısa.

ES5 uyumlu olmanız gerekiyorsa aşağıdakileri yapabilirsiniz:

<script>document.write(Date().split(' ')[3])</script>

4
Kullanıcınız 1000 AD'den önce geriye giderse ne olur? Ya da bir kullanıcı uygulamanızı> 9999 AD kullanıyorsa? #responsibleCode # NotAnotherY2K;)
Nick Steele

3
@NickSteele Umarım o noktada saf javascript yazmıyoruz.
Michael McQuade

1

Bu, saf JavaScript ile çalışacağını düşünebileceğim en iyi çözümdür. Ayrıca, öğeyi CSS'de hedeflenebileceğinden biçimlendirebilirsiniz. Sadece yıl yerine ekleyin ve otomatik olarak güncellenecektir.

//Wait for everything to load first
window.addEventListener('load', () => {
    //Wrap code in IIFE 
    (function() {
        //If your page has an element with ID of auto-year-update the element will be populated with the current year.
        var date = new Date();
        if (document.querySelector("#auto-year-update") !== null) {
            document.querySelector("#auto-year-update").innerText = date.getFullYear();
        }
    })();
});


1

React.js için, altbilgide benim için işe yarayan şey şudur ...

render() {
    const yearNow = new Date().getFullYear();
    return (
    <div className="copyright">&copy; Company 2015-{yearNow}</div>
);
}

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.