วิธีการตั้งค่าเริ่มต้นของวันที่ประเภทอินพุตเป็นวันนี้?


403

ประเภทอินพุต HTML5 นั้นยอดเยี่ยมตัวเลือกวันที่ในตัวใหม่ของ Opera นั้นง่ายและ Chrome ได้สนับสนุนประเภทอินพุตใหม่อย่างน้อยด้วยการใช้ล้อหมุน

แต่มีวิธีการตั้งค่าเริ่มต้นของเขตข้อมูลวันที่วันที่วันนี้หรือไม่? ด้วย Opera ฉันสามารถเลือก 'วันนี้' จากเครื่องมือเลือกวันที่และทันทีที่ฉันคลิกที่ปุ่มขั้นตอนใดปุ่มหนึ่งใน Chrome จะเป็นการเพิ่ม / ลดลงจากวันที่วันนี้

ฉันไม่อายที่จะเขียนคำตอบสำหรับปัญหาเล็ก ๆ น้อย ๆ นี้ แต่ดูเหมือนว่าโง่สำหรับฉันที่เบราว์เซอร์ทั้งสองทราบวันที่ปัจจุบันอย่างสมบูรณ์ แต่จะไม่ปรากฏขึ้นโดยอัตโนมัติ



อาจเป็นไปได้ว่าจะเป็นประโยชน์อย่างมากในการstackoverflow.com/questions/14212527/ …
Musa

วิธีแก้ปัญหา: stackoverflow.com/a/38801898/3147690
villamejia

4
var date = new Date (); // สร้างวัตถุวันที่ var min_date = date.toISOString (). ชิ้น (0,10); //// รับส่วนวันที่ปัจจุบันเฉพาะ "2018-02-02"
GünayGültekin

<input type = "date" value = "YYYY-MM-DD" />
Boris Detry

คำตอบ:


288

เช่นเดียวกับช่องป้อนข้อมูล HTML เบราว์เซอร์จะปล่อยว่างไว้เว้นแต่ว่ามีการระบุค่าเริ่มต้นพร้อมvalueแอตทริบิวต์

แต่น่าเสียดายที่ HTML5 ไม่ได้ให้วิธีการระบุ 'วันนี้' ในส่วนvalueแอตทริบิวต์ (ที่ฉันสามารถดู) เพียงRFC33392011-09-29วันที่ถูกต้องเช่น

TL; DRใช้YYYY-MM-DDรูปแบบวันที่ไม่เช่นนั้นจะไม่ปรากฏ


50
สำหรับผู้ใช้. net: DateTime.Today.ToString ("yyyy-MM-dd")
dvdmn

3
โปรดทราบว่าจำเป็นต้องใช้ '0' ด้านหน้าของเดือนและวัน: "2011-09-29" ใช้งานได้ "2011-9-29" ไม่ได้
โก้

2
Ruby: (ยัง)DateTime.now.strftime("%Y-%m-%d")
Adam Grant

43
@MartinBarker จะไม่เป็นdate('Y-m-d')อย่างนั้นเพราะมันต้องมีศูนย์ชั้นนำหรือไม่
SGR

15
สำหรับ JavaScript: myDate.toLocaleDateString('en-CA')ทำการหลอกลวง
Ulysse BN

218

วัตถุ JavaScript วันที่ให้การสนับสนุนในตัวเพียงพอสำหรับรูปแบบที่ต้องการเพื่อหลีกเลี่ยงการทำด้วยตนเอง:

เพิ่มสิ่งนี้เพื่อการสนับสนุนเขตเวลาที่ถูกต้อง:

Date.prototype.toDateInputValue = (function() {
    var local = new Date(this);
    local.setMinutes(this.getMinutes() - this.getTimezoneOffset());
    return local.toJSON().slice(0,10);
});


jQuery:

$(document).ready( function() {
    $('#datePicker').val(new Date().toDateInputValue());
});​


เพียว JS:

document.getElementById('datePicker').value = new Date().toDateInputValue();

1
ระวังถ้าคุณสนับสนุนมือถือ ใน Android 4.0.3 (อย่างน้อย) ฉันมีปัญหาที่วันที่ใหม่ที่เลือกผ่านการควบคุมวันที่ป๊อปอัปถูกผนวกเข้ากับวันที่วันนี้แทนที่จะมาแทนที่ เช่นคุณสามารถจบด้วย 2013-03-252013-03-27 มากกว่า 2013-03-25 และไม่มีวิธีใดที่ผู้ใช้จะเปลี่ยนได้
Ben Clayton

1
@ Web_Designer ยุติธรรมพอสมควร คุณจะต้องปรับด้วยlocal.setMinutes(this.getMinutes() - this.getTimezoneOffset());(ในที่สุดคำตอบจะได้รับ) ก่อนจากนั้น
บาทหลวง

1
สิ่งนี้จะตั้งค่าคุณสมบัติของค่าเท่านั้นมันไม่ได้ตั้งค่าแอททริบิวดังนั้นหากรีเซ็ตฟอร์มแล้วจะมีค่าเริ่มต้นเป็นไม่มีค่า นอกจากนี้ก็จะมีความชัดเจนมากที่จะใช้toISOStringซึ่งเป็นสิ่งที่toJSONเรียกร้องอยู่แล้ว
RobG

1
@apraetor ที่จริงแล้วมันเป็นวิธีการอื่นเนื่องจากมีเพียงเบราว์เซอร์ที่รองรับการป้อนข้อมูลสนับสนุนvalueAsDate(ซึ่งแยกออกจาก IE, Firefox, Safari หรือ Safari โดยทั่วไปทุกอย่างยกเว้น Chrome, Opera, Edge และเบราว์เซอร์มือถือ) ทุกอย่างรองรับvalueคุณสมบัติที่โซลูชันของฉันใช้แม้ว่าอินพุตวันจะถอยกลับไปเป็นอินพุตข้อความในเบราว์เซอร์ที่ไม่รองรับโซลูชันอื่น ๆ จะผิดพลาดหรือล้มเหลว
ไบรอันรี่

2
คำตอบนี้ใช้ได้สำหรับฉันโดยใช้ a input[type=datetime-local]และเปลี่ยนเป็นslice(0,19)HTH
jcruz

189

สิ่งนี้ใช้ได้กับฉัน:

document.getElementById('datePicker').valueAsDate = new Date();

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement


1
มันทำงานได้กับเบราว์เซอร์ทั้งหมดหรือไม่ และรุ่นมือถือเช่นกัน? ผ่านการทดสอบแล้ว?
Usman Younas

2
ส่วน @UsmanY มันของสเปค HTML5 ดังนั้นสิ่งที่ประเภทการป้อนข้อมูลสนับสนุน HTML5 valueAsDateควรสนับสนุน html.spec.whatwg.org/multipage/forms.html#dom-input-valueasdate
wersimmon

@harbichidian ข้อเสนอสำหรับการป้อนวันที่จะมาถึงข้อเสนอสำหรับมูลค่าเป็นวันที่ในขณะที่ คุณมีลิงค์ไปยังเบราว์เซอร์ที่รองรับคุณสมบัติดังกล่าวหรือไม่?
ไบรอันรี่

3
วันที่จะถูกแปลงเป็นเวลา UTC หากคุณอยู่ที่ 18:00 ใน 2018/03/27 ใน -0600 และคุณตั้งค่าvalueAsDateการnew Date()ค่าเขตข้อมูลจะถูกตั้งค่า 2018/03/28 ดูaustinfrance.wordpress.com/2012/07/09/…
Aupajo

1
ดังที่ @Aupajo กล่าวว่าจะเป็นการกำหนดวันที่ผิดถ้าคุณไม่ต้องการเวลา UTC
ADJenks

81

รหัสต่อไปนี้ทำงานได้ดี:

<input type="date" value="<?php echo date('Y-m-d'); ?>" />

โปรดทราบว่านี่ต้องอาศัย PHP


64
คำตอบของคุณขึ้นอยู่กับ php อย่างสมบูรณ์
Yëco

1
หากคุณกำลังติดต่อแบบฟอร์มอยู่ในหน้า PHP (เช่นบนหน้า WordPress หรือรหัสย่อ) สิ่งนี้จะทำงานได้อย่างสมบูรณ์แบบ ขอบคุณมาก Isham!
tristanojbacon

5
คุณสามารถลดความซ้ำซ้อนโดยเปลี่ยน <?php echo date('Y-m-d', strtotime(date('Y/m/d'))); ?>เป็น<?php echo date('Y-m-d'); ?>
Murray Smith

7
ชุดนี้วันที่ตามวันที่สร้าง (ในเซิร์ฟเวอร์ในโซนเวลาของเซิร์ฟเวอร์) ของเอกสาร HTML มันไม่จำเป็นต้องตรงกับวันที่ปัจจุบันตามจริงกรอกฟิลด์ JavaScript ฝั่งไคลเอ็นต์จะดีกว่าถ้าคุณต้องการทำสิ่งต่าง ๆ ที่ขึ้นอยู่กับฝั่งของผู้ใช้
Jukka K. Korpela

1
คุณยังสามารถใช้แท็กสั้น <? = วันที่ ('Ym-d'); ?> หนึ่ง "echo" น้อยกว่า
sashok_bg

36

คุณสามารถเติมค่าเริ่มต้นผ่านจาวาสคริปต์ตามที่เห็นที่นี่: http://jsfiddle.net/7LXPq/

$(document).ready( function() {
    var now = new Date();
    var month = (now.getMonth() + 1);               
    var day = now.getDate();
    if (month < 10) 
        month = "0" + month;
    if (day < 10) 
        day = "0" + day;
    var today = now.getFullYear() + '-' + month + '-' + day;
    $('#datePicker').val(today);
});

ฉันอาจใช้เวลาเพิ่มเล็กน้อยเพื่อดูว่าเดือนและวันที่เป็นเลขหลักเดียวและนำหน้าด้วยศูนย์พิเศษ ... แต่นี่ควรให้ความคิดกับคุณ

แก้ไข: เพิ่มการตรวจสอบศูนย์พิเศษ


ใน Opera (ทดสอบบน Opera 12 / Windows) สิ่งนี้จะไม่ทำงานหากคุณไม่ใส่เลขศูนย์หน้าในเดือนและวัน
Renato

31

ปฏิบัติตามรูปแบบ Ymd มาตรฐานหากคุณใช้ PHP

<input type="date" value="<?php echo date("Y-m-d"); ?>">

2
คุณควรพูดถึงว่าคำตอบนี้ใช้ได้ผลถ้าคุณใช้ php นี่ไม่ใช่กรณีสำหรับทุกคน
Motassem MK

24

HTML

<input type="date" id="theDate">

JS

$(document).ready(function() {
    var date = new Date();

    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    var today = year + "-" + month + "-" + day;       
    $("#theDate").attr("value", today);
});

การสาธิต

หากคุณไม่ต้องการใช้ jQuery คุณสามารถทำสิ่งนี้ได้

HTML

<input type="date" id="theDate">

JS

var date = new Date();

var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();

if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;

var today = year + "-" + month + "-" + day;       
document.getElementById("theDate").value = today;

การสาธิต


22

ใน HTML5 เป็นเช่นนี้ไม่มีวิธีตั้งค่าเริ่มต้นของเขตข้อมูลวันที่เป็นวันที่วันนี้? ดังที่แสดงในคำตอบอื่น ๆ ค่าสามารถตั้งค่าโดยใช้ JavaScript และนี่เป็นวิธีที่ดีที่สุดหากคุณต้องการตั้งค่าเริ่มต้นตามวันที่ปัจจุบันให้กับผู้ใช้เมื่อโหลดหน้าเว็บ

HTML5 กำหนดvalueAsDateคุณสมบัติสำหรับองค์ประกอบและใช้มันคุณสามารถตั้งค่าเริ่มต้นโดยตรงจากเช่นวัตถุที่สร้างขึ้นโดยinput type=date new Date()อย่างไรก็ตามเช่น IE 10 ไม่ทราบว่าคุณสมบัติ (มันยังขาดการสนับสนุนของแท้input type=dateแต่ก็เป็นปัญหาที่แตกต่างกัน)

ดังนั้นในทางปฏิบัติคุณต้องตั้งค่าvalueคุณสมบัติและต้องเป็นสัญกรณ์ที่สอดคล้องกับ ISO 8601 ทุกวันนี้สิ่งนี้สามารถทำได้ค่อนข้างง่ายเนื่องจากเราสามารถคาดหวังว่าเบราว์เซอร์ที่ใช้ในปัจจุบันจะสนับสนุนtoISOStringวิธีการนี้:

<input type=date id=e>
<script>
document.getElementById('e').value = new Date().toISOString().substring(0, 10);
</script>

6
หรือถ้าคุณต้องการให้เป็นไปตาม Y10K:= new Date().toISOString().split('T')[0];
Blazemonger

1
toISOS การส่งคืนวันที่และเวลา UTC ดังนั้นอาจไม่แสดงวันที่ที่ถูกต้องสำหรับเขตเวลาของผู้ใช้ เช่นถ้าผู้ใช้ UTC + 0800 จากเที่ยงคืนถึง 08:00 พวกเขาจะได้รับวันที่เมื่อวาน
RobG

18

หากคุณกำลังทำสิ่งที่เกี่ยวข้องกับวันที่และเวลาในเบราว์เซอร์คุณต้องการใช้Moment.js :

moment().format('YYYY-MM-DD');

moment()ส่งคืนวัตถุที่เป็นตัวแทนของวันที่และเวลาปัจจุบัน จากนั้นคุณเรียก.format()ใช้เมธอดเพื่อรับการแทนค่าสตริงตามรูปแบบที่ระบุ ในกรณีนี้,YYYY-MM-DDนี้

ตัวอย่างเต็มรูปแบบ:

<input id="today" type="date">
<script>
document.getElementById('today').value = moment().format('YYYY-MM-DD');
</script>

หากคุณมีเวลาสักครู่ () หรือวางแผนที่จะทำงานออกเดทมากขึ้นในแอปพลิเคชันบนเว็บของคุณโซลูชันนี้เป็นเกมง่ายๆ ช่วงเวลาแก้ปัญหามากมาย
secretwep

10

ใช้ moment.js เพื่อแก้ปัญหานี้ใน 2 บรรทัดประเภทอินพุตวันที่ html5 ยอมรับเฉพาะรูปแบบนี้ "YYYY-MM-DD" ฉันแก้ปัญหาด้วยวิธีนี้

var today = moment().format('YYYY-MM-DD');
 $('#datePicker').val(today);

นี่เป็นวิธีที่ง่ายที่สุดในการแก้ปัญหานี้


8

จาวาสคริ

document.getElementById('date-field').value = new Date().toISOString().slice(0, 10);

jquery

$('#date-field').val(new Date().toISOString().slice(0, 10));

ตัวเลือกอื่น

หากคุณต้องการปรับแต่งวันเดือนและปีเพียงแค่ทำผลรวมหรือย่อยตามที่คุณต้องการ😎สำหรับเดือนเริ่มต้นจากแบบฟอร์ม 0 นั่นคือเหตุผลที่ต้องรวม 1 กับเดือน

function today() {
        let d = new Date();
        let currDate = d.getDate();
        let currMonth = d.getMonth()+1;
        let currYear = d.getFullYear();
        return currYear + "-" + ((currMonth<10) ? '0'+currMonth : currMonth )+ "-" + ((currDate<10) ? '0'+currDate : currDate );
    }

Appy ฟังก์ชั่นวันนี้

document.getElementById('date-field').value = today();

$('#date-field').val(today());

7

ง่ายมากเพียงใช้ภาษาฝั่งเซิร์ฟเวอร์เช่น PHP, ASP, JAVA หรือแม้กระทั่งคุณสามารถใช้จาวาสคริปต์

นี่คือทางออก

<?php
  $timezone = "Asia/Colombo";
  date_default_timezone_set($timezone);
  $today = date("Y-m-d");
?>
<html>
  <body>
    <input type="date" value="<?php echo $today; ?>">
  </body>
</html>

7
<input id="datePicker" type="date" />

$(document).ready( function() {
    var now = new Date();
 
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);

    var today = now.getFullYear()+"-"+(month)+"-"+(day) ;


   $('#datePicker').val(today);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="datePicker" type="date" />


5

หากคุณจำเป็นต้องกรอกวันที่และเวลาคุณสามารถใช้:

<input type="datetime-local" name="datetime" 
       value="<?php echo date('Y-m-d').'T'.date('H:i'); ?>" />

5

สำหรับ NodeJS (Express with SWIG templates):

<input type="date" id="aDate" name="aDate" class="form-control" value="{{ Date.now() | date("Y-m-d") }}" />

5

วิธีแก้ไขที่ง่ายที่สุดดูเหมือนจะมองข้ามว่าจะใช้เวลา UTC รวมถึงรายการที่ได้รับการโหวตสูง ด้านล่างเป็นรุ่น ES6 ที่ไม่ใช่ jQuery ที่คล่องตัวของคำตอบที่มีอยู่สองสามข้อ:

const today = (function() {
    const now = new Date();
    const month = (now.getMonth() + 1).toString().padStart(2, '0');
    const day = now.getDate().toString().padStart(2, '0');
    return `${now.getFullYear()}-${month}-${day}`;
})();
console.log(today); // as of posting this answer: 2019-01-24

คุณควรระบุคุณสมบัติขององค์ประกอบอินพุตที่จะกำหนดให้ valueหรือvalueAsDate? ดูดีแม้ว่า
ADJenks

4

นี่คือสิ่งที่ฉันทำในรหัสของฉันฉันเพิ่งทดสอบและใช้งานได้ดีอินพุต type = "date" ไม่สนับสนุนการตั้งค่า curdate โดยอัตโนมัติดังนั้นวิธีที่ฉันใช้เพื่อเอาชนะข้อ จำกัด นี้คือการใช้รหัส PHP อย่างง่ายเช่นนี้ .

<html>
<head></head>
    <body>
        <form ...>
            <?php
                echo "<label for='submission_date'>Data de submissão</label>";
                echo "<input type='date' name='submission_date' min='2012-01-01' value='" . date('Y-m-d') . "' required/>";
            ?>
        </form>
    </body>
</html>

หวังว่ามันจะช่วย!


1
สวัสดีและยินดีต้อนรับสู่ SO โปรดเพิ่มข้อมูลเพิ่มเติมเพื่อสนับสนุนรหัสของคุณและตรวจสอบให้แน่ใจว่าบุคคลที่ถามคำถามต้องการโซลูชันที่ใช้ PHP
พระอิศวร

4

ทั้งคำตอบยอดนิยมไม่ถูกต้อง

ตัวย่อขนาดสั้นหนึ่งบรรทัดที่ใช้จาวาสคริปต์แท้สร้างบัญชีสำหรับเขตเวลาท้องถิ่นและไม่จำเป็นต้องกำหนดฟังก์ชั่นพิเศษเพิ่มเติม:

const element = document.getElementById('date-input');
element.valueAsNumber = Date.now()-(new Date()).getTimezoneOffset()*60000;
<input id='date-input' type='date'>

สิ่งนี้จะได้รับ datetime ปัจจุบันเป็นมิลลิวินาที (ตั้งแต่ยุค) และใช้การชดเชยเวลาในหน่วยมิลลิวินาที (นาที * 60k นาทีต่อมิลลิวินาที)

คุณสามารถกำหนดวันที่ใช้element.valueAsDateแต่จากนั้นคุณมีการโทรพิเศษเพื่อDate()สร้าง


4

นี่เป็นสิ่งที่คุณต้องทำในฝั่งเซิร์ฟเวอร์เนื่องจากรูปแบบเวลาท้องถิ่นของผู้ใช้แต่ละคนแตกต่างกันไป

ค่าอินพุตวันที่ Html ควรอยู่ในรูปแบบนี้: yyyy-mm-ddมิฉะนั้นจะไม่แสดงค่า

ASP CLASSIC หรือ VBSCRIPT:

current_year = DatePart("yyyy",date) 
current_month = DatePart("m",date) 
current_day = DatePart("d",date) 

IF current_month < 10 THEN
current_month = "0"&current_month
END IF
IF current_day < 10 THEN
current_day = "0"&current_day
END IF

get_date = current_year&"-"&current_month&"-"&current_day
Response.Write get_date

ผลผลิตของวันที่วันนี้: 2019-02-08

จากนั้นใน html ของคุณ: <input type="date" value="<% =get_date %>"

PHP

เพียงใช้สิ่งนี้: <input type="date" value="<?= date("Y-m-d"); ?>">


4

ง่ายมากโดยใช้รหัสต่อไปนี้ใช้ PHP

<input type="date" value="<?= date('Y-m-d', time()); ?>" />

time()ฟังก์ชั่นวันที่จะกลับมาวันที่ปัจจุบันโดยการใช้วันที่ใน


2

โดย Javascript:

var today = new Date();

document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);

2
new Date().getFullYear()+"-"+ ((parseInt(new Date().getMonth())+1+100)+"").substring(1)

1
โปรดเพิ่มคำอธิบายด้วยคำตอบของคุณ
bawa g

1

หากคุณใช้ทับทิมคุณสามารถใช้สิ่งนี้เพื่อตั้งค่าเริ่มต้นเป็นวันที่และเวลาของวันนี้:

<input type="datetime-local" name="time" value="<%= Time.now.strftime('%Y-%m-%dT%H:%M') %>" />

1

ทางออกที่ง่าย:

<input class="set-today" type="date">
<script type="text/javascript">
    window.onload= function() {
        document.querySelector('.set-today').value=(new Date()).toISOString().substr(0,10));
    }
</script>

1
@GeorgeJempty สิ่งนี้ไม่ได้หากเวลาปัจจุบันใน UTC เป็นวันที่แตกต่างจากวันปัจจุบัน มันจะส่งคืนวันที่ปัจจุบันใน UTC ไม่ใช่ในเขตเวลาท้องถิ่นของคุณ
ADJenks

@adjenks Heh ฉันเห็นว่ามันเป็นช่วงเวลาที่เหมาะสำหรับฉันที่จะทดสอบ 10 นาทีจนถึงเที่ยงคืน
24719

@adjenks ในที่สุดฉันก็ขีดเส้นแบ่งครึ่งโหลเพื่อหลีกเลี่ยงข้อผิดพลาด UTC และปรับปรุงเล็กน้อยในคำตอบ jQuery / non-ES6 ที่คล้ายกันเล็กน้อย: stackoverflow.com/a/54341296/34806
Dexygen

คำตอบมีส่วนเสริม ")" ที่ท้ายบรรทัดและมีคำอธิบายเพิ่มเติมรอบ ๆ "วันที่ใหม่ ()" ควรเป็น: document.querySelector('.set-today').value=new Date().toISOString().substr(0,10);
Kirby L. Wallace

0

เนื่องจากไม่มีวิธีการเริ่มต้นการตั้งค่าเป็นวันที่วันนี้ฉันจะบอกว่าสิ่งนี้ควรขึ้นอยู่กับแอปพลิเคชันของมัน หากคุณต้องการเพิ่มการรับชมของผู้ชมให้ได้มากที่สุดให้ใช้ตัวเลือกวันที่จากนั้นใช้สคริปต์ฝั่งเซิร์ฟเวอร์ (PHP, ASP และอื่น ๆ ) เพื่อตั้งค่าเริ่มต้น

อย่างไรก็ตามหากเป็นคอนโซลการดูแลระบบของ CMS และคุณรู้ว่าผู้ใช้จะมี JS อยู่เสมอหรือเว็บไซต์ของคุณเชื่อถือได้คุณสามารถใช้ JS เพื่อเติมค่าเริ่มต้นได้อย่างปลอดภัยตาม jlbruno


0

ฉันมีปัญหาเดียวกันและฉันแก้ไขด้วย JS ง่ายๆ อินพุต:

<input type="date" name="dateOrder" id="dateOrder"  required="required">

JS

<script language="javascript">
document.getElementById('dateOrder').value = "<?php echo date("Y-m-d"); ?>";
</script>

สำคัญ: สคริปต์ JS ควรอยู่ในบรรทัดรหัสสุดท้ายหรือหลังจากป้อนข้อมูลเนื่องจากถ้าคุณใส่รหัสนี้ไว้ก่อนหน้าสคริปต์จะไม่พบอินพุตของคุณ


2
หากคุณกำลังใช้ PHP แล้วทำไมรำคาญกับ JavaScript ?
Blazemonger

0

ไม่มีวิธีการเริ่มต้นภายใน HTML นั้นเพื่อแทรกวันที่วันนี้ลงในช่องใส่ อย่างไรก็ตามเช่นเดียวกับช่องใส่อื่น ๆ ก็จะยอมรับค่า

คุณสามารถใช้ PHP เพื่อดึงวันที่วันนี้และป้อนลงในฟิลด์ค่าขององค์ประกอบแบบฟอร์ม

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";

    // Send to the browser the input field with the value set with the date string
    echo "<input type='date' value='$date_string' />";
?>

ฟิลด์ค่ายอมรับรูปแบบ YYYY-MM-DD เป็นอินพุตดังนั้นเพียงสร้างตัวแปร $date_stringในรูปแบบเดียวกับที่ค่าอินพุตยอมรับและเติมด้วยปีเดือนและวันที่ดึงมาจากวันที่ปัจจุบันและวันที่! คุณมีวันที่กำหนดไว้ล่วงหน้าแล้ว!

หวังว่าจะช่วย :)

แก้ไข:

หากคุณต้องการให้ฟิลด์อินพุตซ้อนกันภายใน HTML แทนที่จะเป็น PHP คุณสามารถทำสิ่งต่อไปนี้ได้

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";
?>
<html>
    <head>...</head>
    <body>
        <form>
            <input type="date" value="<?php print($date_string); ?>" />
        </form>
    </body>
</html>

ฉันรู้ว่าคำถามนี้ถูกถามสักครู่ (2 ปีที่แล้ว) แต่มันก็ยังใช้เวลาสักครู่ในการหาคำตอบที่ชัดเจนบนอินเทอร์เน็ตดังนั้นสิ่งนี้จะไปให้บริการทุกคนที่กำลังมองหาคำตอบเมื่อใดก็ตามที่มันอาจเป็นและหวังว่า ช่วยทุกคนอย่างมาก :)

การแก้ไขอื่น:

เกือบลืมไปแล้วสิ่งที่เป็นความเจ็บปวดสำหรับฉันในอดีตมักจะลืมกำหนดเขตเวลาเริ่มต้นทุกครั้งที่สร้างสคริปต์ใน PHP ที่ใช้ฟังก์ชั่น date ()

date_default_timezone_set(...);ไวยากรณ์ เอกสารที่สามารถพบได้ที่นี่ที่ PHP.netและรายชื่อของเขตเวลาที่ได้รับการสนับสนุนที่จะแทรกเข้าไปในฟังก์ชั่นที่สามารถพบได้ที่นี่ นี่เป็นเรื่องที่น่ารำคาญอยู่เสมอตั้งแต่ฉันอยู่ในออสเตรเลียทุกอย่างจะถูกผลักกลับไปอีก 10 ชั่วโมงถ้าฉันไม่ได้ตั้งค่าไว้อย่างถูกต้องเพราะมันเป็นค่าเริ่มต้นที่ UTC + 0000 ซึ่งฉันต้องการ UTC + 1000 ดังนั้นต้องระมัดระวัง :)


0

ขอบคุณปีเตอร์ตอนนี้ฉันเปลี่ยนรหัสของฉัน

<input type='date' id='d1' name='d1'>

<script type="text/javascript">
var d1 = new Date();
var y1= d1.getFullYear();
var m1 = d1.getMonth()+1;
if(m1<10)
    m1="0"+m1;
var dt1 = d1.getDate();
if(dt1<10)
dt1 = "0"+dt1;
var d2 = y1+"-"+m1+"-"+dt1;
document.getElementById('d1').value=d2;
</script>

3
ได้โปรดได้โปรดอย่าใช้เอกสารเขียนในแอปพลิเคชันจริง - มีปัญหามากมายในการใช้งาน
ปีเตอร์ฮาร์

ปีเตอร์คุณอธิบายได้ไหมว่าปัญหาอะไร คุณได้ ?
Nikhil sHETH

ปีเตอร์ยังพูดถึงว่าคุณได้รับวันที่ปัจจุบันเป็นค่าเริ่มต้นในประเภทอินพุต = วันที่อย่างไร
Nikhil sHETH

1
ไม่ใช่ว่ามันใช้ไม่ได้ แต่โดยทั่วไปแล้วมันเป็นวิธีปฏิบัติที่ไม่ดีที่จะใช้ document.write มีหลายเหตุผลที่เป็นเช่นนี้นี่คือตัวอย่าง: stackoverflow.com/questions/802854/ ถ้าฉันต้องทำอย่างนี้ในจาวาสคริปต์บนไคลเอนต์ฉันจะใช้ id ในองค์ประกอบและเอกสาร getElementById เพื่อรับองค์ประกอบและเปลี่ยนแปลงเช่นเดียวกับคำตอบอื่น ๆ ในหน้านี้
Peter Hart

0

และสำหรับผู้ที่ใช้ ASP VBScript

<%
'Generates date in yyyy-mm-dd format
Function GetFormattedDate(setDate)
strDate = CDate(setDate)
strDay = DatePart("d", strDate)
strMonth = DatePart("m", strDate)
strYear = DatePart("yyyy", strDate)
If strDay < 10 Then
  strDay = "0" & strDay
End If
If strMonth < 10 Then
  strMonth = "0" & strMonth
End If
GetFormattedDate = strYear & "-" & strMonth & "-" & strDay
End Function
%>

และในร่างกายองค์ประกอบของคุณควรมีลักษณะเช่นนี้

<input name="today" type="date" value="<%= GetFormattedDate(now) %>" />

ไชโย!


0

แม้หลังจากเวลาทั้งหมดเหล่านี้มันอาจช่วยใครซักคน นี่เป็นโซลูชัน JS ที่ง่าย

JS

  let date = new Date();
  let today = date.toISOString().substr(0, 10);
  //console.log("Today: ", today);//test
  document.getElementById("form-container").innerHTML =
    '<input type="date" name="myDate" value="' + today + '" >';//inject field

HTML

 <form id="form-container"></form>

โซลูชันที่คล้ายกันทำงานในAngularโดยไม่มีไลบรารีเพิ่มเติมเพื่อแปลงรูปแบบวันที่ สำหรับ Angular (รหัสสั้นลงเนื่องจากรหัสส่วนประกอบทั่วไป):

//so in myComponent.ts 
//Import.... @Component...etc...
date: Date = new Date();
today: String; //<- note String
//more const ...
export class MyComponent implements OnInit {
   //constructor, etc.... 
   ngOnInit() {
      this.today = this.date.toISOString().substr(0, 10);
   }
}
//so in component.html 
<input type="date" [(ngModel)]="today"  />

นี่เป็นวิธีที่ยุ่งยากเกินไปสำหรับเพียงแค่ต้องใช้ค่าเริ่มต้น
ปรับปรุงใหม่

ตัวอย่างอิสระสองข้อใดที่คุณพยายามชี้ให้เห็น โค้ด 4 บรรทัดในทั้งสองตัวอย่าง ... ตัวอย่างแรกคือ pure html + js ดังนั้นให้สร้าง container และ copy code paste ของทั้งสามบรรทัดถ้าคุณไม่นับความคิดเห็น เช่นเดียวกับตัวอย่างเชิงมุมซึ่งเป็นเหตุผลที่ฉันทิ้งความคิดเห็นไว้ ไม่แน่ใจว่าคุณหมายถึงอะไร ....
StefaDesign
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.