2013-03-18 34 views
13

Tôi có kiểm soát html datetime-local trên biểu mẫu của mình và tôi cần đặt ngày và giờ trên đó một cách linh hoạt thông qua JS hoặc jQuery. Tôi làm nó như thế nào?Cách đặt datetime trên datetime-local thông qua jQuery

<input type="datetime-local" id="publishDate" required/> 

tôi đã cố gắng

$("#publishDate").val("2013-3-18 13:00"); 
$("#publishDate").val("2013-3-18T13:00"); 
$("#publishDate").val(new Date().toLocalString()); 

nhưng không làm việc.

Xin cảm ơn trước.

Trả lời

13

này sẽ làm các trick

$("#publishDate").val("2013-03-18T13:00"); 

Bạn cần phải sử dụng 2 chữ số trong tháng để làm cho công việc mẫu của bạn.

+0

Cảm ơn rất nhiều. Điều đó hiệu quả. –

+0

Cảm ơn, nhưng điều này không hoạt động trong firefox – shiva

9

Nếu bạn muốn thiết lập các ngày hiện tại, sau đó bạn có thể thử này:

__Method 1:__ 

$(document).ready(function(){ 
    $('input[type=datetime-local]').val(new Date().toJSON().slice(0,19)); 
}); 

__Method 2:__ 

function zeroPadded(val) { 
    if (val >= 10) 
    return val; 
    else 
    return '0' + val; 
} 

$(document).ready(function(){ 
    d = new Date(); 
    $('input[type=datetime-local]').val(d.getFullYear()+"-"+zeroPadded(d.getMonth() + 1)+"-"+zeroPadded(d.getDate())+"T"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()); 
}); 

Lưu ý: Bạn có thể thay thế $ ('input [type = datetime-địa phương]') với Id hoặc Name hoặc Class của trường giờ địa phương.

CHỈNH SỬA: d.getMonth() trả về giá trị từ 0-11, do đó, để nhập đúng tháng 1 cần phải được thêm vào kết quả.

+0

Nó không hoạt động vì tất cả các phương thức của ngày javascript trả về một giá trị không có số 0 đứng đầu. http://stackoverflow.com/a/3605248/792624 – jan267

+0

Đã chỉnh sửa. Hãy thử và cho tôi biết :) –

+1

** Lưu ý ** 'ngày mới(). ToJSON(). Slice (0,19)' và 'new Date(). ToISOString(). Slice (0,19)' cả hai trả về UTC-time, không __local time__. –

5

Tôi đã viết jQuery method that sets the current UTC time. Sẽ hữu ích khi khởi tạo các trường nhập datetimedatetime-local.

Đây là cách bạn sẽ sử dụng nó để khởi tạo trường.

$('input[type="datetime"]').setNow(); 

Hoặc chuyển đối số true để chỉ đặt trường không có giá trị.

$('input[type="datetime"]').setNow(true); 
+0

nhờ mở rộng jQuery của bạn đã làm các trick ! https://gist.github.com/ryanburnette/8803238 – d1jhoni1b

+0

Thật tuyệt vời khi nghe! Điều đó nhắc tôi rằng tôi cần phải làm sạch đoạn mã đó. –

7

Còn về?

var now=new Date(); 
 
console.log(new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,19));

0

Thành phần này bị rối loạn vì chưa được chỉ định đúng cách. Việc triển khai cũng có khả năng là kỳ quặc.

Cách đúng đắn để thực hiện việc này là chuyển đối tượng ngày, với JS và DOM sẽ không có ý nghĩa gì nếu không có điều này. Làm những việc với thao tác chuỗi sẽ gọi Zalgo. Sớm hay muộn nó sẽ phá vỡ với miền địa phương hoặc múi giờ.

tôi đã tìm kiếm một cái gì đó như thế này và trong Chrome 46 được tìm thấy:

$('input[type=datetime-local]').prop('valueAsNumber', Math.floor(new Date()/60000) * 60000); // 60seconds * 1000milliseconds 

Nếu bạn không loại bỏ các thứ hai và mili giây họ sẽ hiển thị trong trường nhập.

Có một tài sản valueAsDate cũng nhưng cách bí ẩn:

Uncaught DOMException: Failed to set the 'valueAsDate' property on 'HTMLInputElement': This input element does not support Date values. 

Vì vậy, họ đã không thực hiện nó chưa hoặc chọn một tên xấu cho tài sản đó xong (nó cho thấy là vô ngay cả khi một cái gì đó được thiết lập mặc dù) .

Các vấn đề liên quan