กำหนดวันที่ในประเภทอินพุตวันที่


109
<input id="datePicker" type="date" />​

ฉันจะตั้งวันที่ของวันนี้ในวันที่ประเภทอินพุต datepicker ใน chrome

$(document).ready( function() {
    var now = new Date();
    var today = now.getDate()  + '/' + (now.getMonth() + 1) + '/' + now.getFullYear();
    alert(today);
    $('#datePicker').val(today);
});​

แต่มันไม่ทำงาน

แก้ไข jsFiddle นี้ - โปรดลองใน chrome


2
หากคุณเลือกวันที่บนซอของคุณและตรวจสอบกรอบผลลัพธ์การ$('#datePicker').val();ให้"2012-09-10"และนั่นไม่ใช่รูปแบบที่คุณใช้ในการตั้งวันที่

มันทำงานใน chrome ในตอนท้ายของฉัน .. คุณหมายถึงits not workingอะไร?
AdityaParab

ลอง{ currentText: "Now" }ดูคู่มือ
diEcho

ทำงานกับฉัน ... ปัญหาคืออะไร?
Netorica

1
@JigarPandya fr_FR (@ user108 ดูที่stackoverflow.com/a/3496622/180100 )

คำตอบ:


162

ลิงค์ซอ: http://jsfiddle.net/7LXPq/93/

สองปัญหานี้:

  1. การควบคุมวันที่ใน HTML 5 ยอมรับในรูปแบบของปี - เดือน - วันตามที่เราใช้ใน SQL
  2. ถ้าเดือน 9 ต้องตั้งค่าเป็น 09 ไม่ใช่ 9 ง่ายๆ ดังนั้นจึงใช้สำหรับฟิลด์วันด้วย

โปรดไปที่ลิงก์ซอสำหรับการสาธิต:

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

4
คำตอบหลังปี 2012: ตรวจสอบคำตอบของฉันสำหรับโซลูชันที่รองรับในโค้ดหนึ่งบรรทัด
Oliv Utilo

@ OlivUtilo แน่นอน แต่คำตอบของคุณจะให้ผลลัพธ์ที่ไม่ถูกต้องในบางครั้ง
RobG

คุณประหยัดเวลาของฉันขอบคุณมาก
จุ่มสุรณี

130

document.getElementById("datePicker").valueAsDate = new Date()

ควรทำงาน.


6
นี่เป็นทางออกที่ดีที่สุดที่ฉันเคยพบมา - ใช้ได้กับ Android 4.0.3
Ben Clayton

6
ดูเหมือนว่าจะสะอาดกว่าคำตอบที่ยอมรับอย่างแน่นอน ... ขอบคุณ
Skipjack

1
ฉันพบว่าสิ่งนี้ใช้ไม่ได้ใน Safari ด้วยเหตุผลบางประการ :(
james_alvarez

ทดสอบใน Chrome และ Edge แล้วพบว่าใช้งานได้ดี อย่างที่ @Skipjack กล่าวไว้คือคำตอบที่ยอดเยี่ยม!
อรุณ

ดูเหมือนวิธีแก้ปัญหาที่ถูกต้องอย่างไรก็ตามใน Safari (13.1.2) การโทรทำให้คุณได้รับข้อยกเว้นสถานะที่ไม่ถูกต้อง ไม่แน่ใจว่าทำไม ... ?
fbitterlich

23

ปรับปรุง: date.toISOString().substr(0, 10)ฉันทำเช่นนี้ด้วย ให้ผลลัพธ์เช่นเดียวกับคำตอบที่ยอมรับและมีการสนับสนุนที่ดี


2
ทำงานในซาฟารี
james_alvarez

4
หมายเหตุ:ให้วันที่ในเขตเวลา UTC ในทางตรงกันข้ามคำตอบด้านบนใช้เวลาท้องถิ่น
Qwertie

@Qwertie - ทั้งคู่ทำงานบนDateวัตถุเดียวกัน(สร้างด้วย Date หรือ Date.now ใหม่ซึ่งสืบทอดเขตเวลาจากเบราว์เซอร์) การใช้ toISOString หรือฟังก์ชัน getDate จะ (ฉันคิดว่า) แก้ปัญหาเดียวกัน ดังนั้นฉันคิดว่าสิ่งนี้น่าจะมีพฤติกรรมที่ต้องการ ...
Oliv Utilo

1
@ OlivUtilo - ไม่พวกเขาไม่ได้อยู่ในช่วงเวลาของการชดเชยเขตเวลาสำหรับโฮสต์
RobG

ดังที่ Qwertie กล่าวสิ่งนี้อาจให้คำตอบที่ผิดหากคุณใช้วันที่โดยไม่มีเวลา เช่น Sat Sep 01 2018 00:00:00 GMT + 0100 ได้รับการแปลงเป็น "2018-08-31"
havlock


12

สำหรับฉันวิธีที่สั้นที่สุดในการแก้ปัญหานี้คือใช้ moment.js และแก้ปัญหานี้ใน 2 บรรทัด

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

1
ใช่เช่นเดียวกับ $ ('# datePicker'). val (moment (). format ('YYYY-MM-DD'));
Umair Khalid

2
สำหรับคนที่ไม่คุ้นเคยกับ Moment หากคุณต้องการจัดรูปแบบวัตถุ Javascript Date โดยพลการด้วยช่วงเวลา (): var yourFormattedDate= moment(yourDate).format('YYYY-MM-DD'); $('#datePicker').val(yourFormattedDate);
veuncent


1

ฉันมักจะสร้างฟังก์ชันตัวช่วยทั้งสองนี้เมื่อใช้อินพุตวันที่:

// date is expected to be a date object (e.g., new Date())
const dateToInput = date =>
  `${date.getFullYear()
  }-${('0' + (date.getMonth() + 1)).slice(-2)
  }-${('0' + date.getDate()).slice(-2)
  }`;

// str is expected in yyyy-mm-dd format (e.g., "2017-03-14")
const inputToDate = str => new Date(str.split('-'));

จากนั้นคุณสามารถตั้งค่าการป้อนวันที่เป็น:

$('#datePicker').val(dateToInput(new Date()));

และดึงค่าที่เลือกเช่นนั้น

const dateVal = inputToDate($('#datePicker').val())

1

คุณสามารถใช้วันที่ในการป้อนข้อมูลtype="date"เป็นรูปแบบเท่านั้นYYYY-MM-DD

ฉันได้ติดตั้งตัวช่วยเช่นเดียวกับformatDateแฮนด์ฟรี NODE.js ไม่ต้องกังวล ... เพียงแค่ใช้รูปแบบตามที่อธิบายไว้ในบรรทัดแรก

เช่น:

< input type="date" id="date" name="date" class="form-control" value="{{formatDate invoice.date 'YYYY-MM-DD'}}" />

0

Datetimepicker ต้องการรูปแบบอินพุต YYYY-MM-DD เสมอโดยไม่สนใจรูปแบบการแสดงผลของโมเดลของคุณหรือเกี่ยวกับวันที่และเวลาของระบบโลคัลของคุณ แต่รูปแบบเอาต์พุตของตัวเลือกวันเวลาเป็นสิ่งที่คุณต้องการ (ระบบโลคัลของคุณ) มีตัวอย่างง่ายๆคือในโพสต์ของฉัน


0

สำหรับฉันวิธีที่สั้นที่สุดในการรับวันที่และในรูปแบบที่ถูกต้องสำหรับการป้อนข้อมูลtype="date"คือ:

var d = new Date(); 
var today = d.getFullYear()+"-"+("0"+(d.getMonth()+1)).slice(-2)+"-"+("0"+d.getDate()).slice(-2);

หรือสิ่งนี้:

var d = new Date().toLocaleDateString().split('/');
var today = d[2]+"-"+("0"+d[0]).slice(-2)+"-"+("0"+d[1]).slice(-2);

จากนั้นตั้งค่าการป้อนวันที่:

$('#datePicker').val(today);

-5

เวอร์ชัน jquery

var currentdate = new Date();

$('#DatePickerInputID').val($.datepicker.formatDate('dd-M-y', currentdate));

4
$.datepickerไม่ใช่ jQuery เริ่มต้น คุณกำลังใช้ปลั๊กอินและไม่ได้บอกว่าอันไหนคำตอบนี้ไม่มีประโยชน์
Emile Bergeron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.