วิธีที่สั้นที่สุดในการพิมพ์ปีปัจจุบันในเว็บไซต์


232

ฉันต้องอัปเดตหน้า HTML คงที่จำนวนไม่กี่ร้อยหน้าที่มีวันที่ลิขสิทธิ์กำหนดไว้อย่างหนักในส่วนท้าย ฉันต้องการแทนที่ด้วย JavaScript บางตัวที่จะอัปเดตโดยอัตโนมัติในแต่ละปี

ขณะนี้ฉันกำลังใช้:

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

นี่มันสั้นไปไหม

คำตอบ:


542

นี่คือสั้นที่สุดที่ฉันจะได้รับ:

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

สิ่งนี้จะใช้ได้กับเบราว์เซอร์ทั้งหมดที่ฉันใช้งาน

ฉันไปถึงที่นั่นได้อย่างไร:

  • คุณสามารถโทรgetFullYearโดยตรงไปยังที่เพิ่งสร้างDateใหม่ไม่จำเป็นต้องมีตัวแปร new Date().getFullYear()อาจจะดูแปลกสักหน่อย แต่ก็มีความน่าเชื่อถือคือส่วนหนึ่งจะทำครั้งแรกแล้วnew Date().getFullYear()
  • คุณสามารถปล่อยได้typeเนื่องจาก JavaScript เป็นค่าเริ่มต้น นี่เป็นเอกสารที่เป็นส่วนหนึ่งของข้อกำหนด HTML5ซึ่งในกรณีนี้น่าจะเขียนสิ่งที่เบราว์เซอร์ทำอยู่แล้ว
  • คุณสามารถวางเครื่องหมายอัฒภาคในตอนท้ายสำหรับอักขระพิเศษที่บันทึกไว้หนึ่งตัวเนื่องจาก JavaScript มี "การแทรกเครื่องหมายอัฒภาคอัตโนมัติ" ซึ่งโดยทั่วไปฉันจะดูถูกและแยกคุณลักษณะแต่ในกรณีการใช้งานนี้โดยเฉพาะควรปลอดภัยพอ

เป็นสิ่งสำคัญที่จะต้องทราบว่าสิ่งนี้ใช้ได้กับเบราว์เซอร์ที่เปิดใช้งาน JavaScript เท่านั้น จะเป็นการดีกว่านี้จะได้รับการจัดการที่ดีขึ้นเป็นงานแบทช์ออฟไลน์ ( sedสคริปต์บน * ห้าม ฯลฯ ) ปีละครั้ง แต่ถ้าคุณต้องการโซลูชัน JavaScript ฉันคิดว่ามันสั้นที่สุดเท่าที่จะทำได้ (ตอนนี้ฉันได้จากไปแล้วและล่อลวงชะตากรรม)


1
ในปี 2019 จะเขียนเนื้อหาของหน้าใหม่ทั้งหมด ฉันพลาดอะไรไปรึเปล่า?
ระบบ Rebooter

2
@SystemsRebooter - คุณสามารถใช้document.writeสำหรับเนื้อหาแบบอินไลน์ระหว่างขั้นตอนการแยกวิเคราะห์เริ่มต้นเท่านั้น (ดังที่แสดงด้านบนใน<script>...</script>แท็ก - หรือใน.jsไฟล์ที่โหลดด้วยscriptแท็กที่ไม่มี deferหรือasync) เมื่อหน้าถูกแจงอย่างสมบูรณ์สตรีมเอกสารจะถูกปิดและใช้document.writeใหม่โดยเปิดใหม่ - แทนที่เอกสารใหม่ทั้งหมด หากคุณต้องการเพิ่มหนึ่งปีหลังจากการแยกวิเคราะห์หลักเสร็จสมบูรณ์คุณต้องการใช้ DOM (นี่ไม่ใช่การเปลี่ยนแปลงมันเป็นเช่นนี้เสมอ)
TJ Crowder

44

คำตอบของ TJ นั้นยอดเยี่ยม แต่ฉันวิ่งเข้าไปในสถานการณ์หนึ่งที่ HTML ของฉันถูกเรนเดอร์แล้วและสคริปต์ document.write จะเขียนทับเนื้อหาทั้งหมดของหน้าเว็บด้วยวันปีที่

สำหรับสถานการณ์นี้คุณสามารถผนวกโหนดข้อความต่อท้ายองค์ประกอบที่มีอยู่โดยใช้รหัสต่อไปนี้:

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

ใช่ - ทางออกที่ดี! ฉันแนะนำให้ย้ายตัวอย่างสคริปต์ก่อนแท็กเนื้อหาปิดหรือไปยัง js อื่น ๆ ของคุณที่ส่วนท้ายของเนื้อหา html
Christian Michael

createTextNode()ไม่ตีความ html เหมือน<br>คุณสร้างโหนดด้วย HTML ได้อย่างไร
rubo77

19

หากคุณต้องการรวมกรอบเวลาในอนาคตกับปีปัจจุบัน (เช่น 2017) เป็นปีเริ่มต้นเพื่อให้ปีถัดไปมันจะปรากฏดังนี้:“ © 2017-2018, บริษัท ” จากนั้นใช้รหัสต่อไปนี้ . มันจะอัปเดตโดยอัตโนมัติในแต่ละปี:

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

©ลิขสิทธิ์ 2017-2018 บริษัท

แต่ถ้าปีแรกผ่านไปแล้วรหัสที่สั้นที่สุดสามารถเขียนได้ดังนี้

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

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

1
ฉันรู้ว่า <script> สั้นกว่า (ดูคำตอบอื่น) แต่เขาเป็นปัจจุบันมากกว่าและจะใช้ได้เสมอ ในความเป็นจริงฉันมีอินสแตนซ์ใน WP ที่อีกอันหนึ่งไม่ทำงาน แต่อันนี้ไม่มีปัญหา ไม่แน่ใจว่าทำไม WP จะโยนปัญหาไปที่นี้ ... ฉันรู้ว่าทุกวันนี้คุณสามารถวาง; ในตอนท้ายและสคริปต์เริ่มต้นที่ js ต่อไป แต่ก็ยัง
มาลาคี

9

โซลูชัน JS ใช้งานได้ดี แต่ฉันจะให้คำแนะนำเกี่ยวกับโซลูชันฝั่งเซิร์ฟเวอร์ บางเว็บไซต์ที่ฉันตรวจสอบมีปัญหาว่าหน้าทั้งหน้าจะว่างเปล่าและมีเพียงปีที่จะเห็นเป็นครั้งคราว

สาเหตุของเรื่องนี้คือdocument.writeเขียนทับเอกสารทั้งหมดจริง ๆ

ฉันขอให้เพื่อนของฉันใช้โซลูชันฝั่งเซิร์ฟเวอร์และมันก็ใช้งานได้สำหรับเขา รหัสง่าย ๆ ใน PHP

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

สนุก!


1
คำตอบของคุณนั้นง่ายมาก แต่สิ่งนี้ก็คือคำถามนั้นเกี่ยวกับ JavaScript
Mo.

2
ฮ่าฮ่า! วิธีแก้ไขได้รับเมื่อฉันโพสต์สิ่งนี้ ถึงกระนั้นฉันก็อยากให้คนอื่นรู้ว่ามีวิธีอื่นด้วย! หวังว่ามันจะช่วยคนอย่างฉันในอนาคต!
Arcanyx

ฉันเห็นด้วยกับคุณว่าเราต้องมองหาทางเลือกอื่นเมื่อไม่มีวิธีแก้ปัญหาด้วยความคิดเดียวกัน ระมัดระวังเกี่ยวกับการลงคะแนนเสียง😉
Mo.

และจะเกิดอะไรขึ้นถ้าโซลูชันฝั่งเซิร์ฟเวอร์คือ Node.js และ JavaScript
rorymorris89

2
หากเพจว่างเปล่าหมายความว่าdocument.writeมีการใช้งานหลังจากโหลด DOM แล้ว การแก้ปัญหาคือไม่ใช้document.writeหลังจากโหลด DOM ทั้งหมดหรือดีกว่าไม่ใช้document.writeเลย
user4642212

8

นี่เป็นเวอร์ชั่นที่สั้นที่สุดที่มีความรับผิดชอบมากที่สุดแม้กระทั่งใช้ได้ทั้งโฆษณาและ BC

[กลองม้วน ... ]

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

แค่นั้นแหละ. 6 ไบต์สั้นกว่าคำตอบที่ยอมรับ

หากคุณต้องการใช้งานร่วมกับ ES5 ได้คุณสามารถชำระ:

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

4
จะเป็นอย่างไรถ้าผู้ใช้ของคุณย้อนเวลากลับไปก่อน 1000 ปี หรือถ้าผู้ใช้ใช้แอปของคุณ> 9999 AD ล่ะ #responsibleCode # NotAnotherY2K;)
Nick Steele

3
@NickSteele หวังว่าเราจะไม่เขียนจาวาสคริปต์แท้ๆ ณ จุดนั้น
Michael McQuade

1

นี่เป็นทางออกที่ดีที่สุดที่ฉันสามารถคิดได้ว่าจะใช้งานได้กับ JavaScript ที่แท้จริง คุณยังสามารถจัดองค์ประกอบตามที่กำหนดเป้าหมายใน CSS เพียงเพิ่มในปีนี้และมันจะได้รับการปรับปรุงโดยอัตโนมัติ

//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 ต่อไปนี้เป็นสิ่งที่ใช้ได้ผลกับฉันในส่วนท้าย ...

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

0

ตามการตรวจสอบโครเมี่ยม

สำหรับผู้ใช้ในการเชื่อมต่อที่ช้าสคริปต์ภายนอกจะทำการแทรกผ่านทางไดนามิก document.write()สามารถหน่วงเวลาโหลดหน้าเว็บได้สิบวินาที

https://web.dev/no-document-write/?utm_source=lighthouse&utm_medium=devtools

ดังนั้นการแก้ปัญหาโดยไม่มีข้อผิดพลาดคือ:

(new Date).getFullYear();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.