2014-05-13 14 views
5

Tôi đang cố tạo đối tượng ngày javascript trong hàm focus.add_days để thêm một số ngày vào ngày đã cho trong phần tử. vấn đề là đối tượng javascript không mong đợi một chuỗi "Y-m-d" vì vậy làm thế nào tôi có thể tạo đối tượng ngày mà không phân tích cú pháp chuỗi "Y-m-d" thành nhiều phần, hoặc là cách duy nhất?Đối tượng ngày JavaScript từ <input type = date>

trigger = { 
fecha_ini: function(){ 
    $('input[name="fecha_ini"]').on('change',function(){ 
     console.log('hi'); 
     var fecha_fin = $(':input [name=fecha_fin]'); 
     var min = $(this).val(); 
     //here is where i pass the "Y-m-d" string as the date argument 
     var max = fechas.add_days(min,31*4); 
     fecha_fin.attr('min',min); 
     fecha_fin.attr('max',max); 
     fecha_fin.val(''); 
    }) 
    } 
}; 

fechas = { 
    add_days: function addDays(date, days) { 
    //here is where i use the string "Y-m-d" to create the date object, but obviusly doesnt work 
    var result = new Date(date); 
    result.setDate(date.getDate() + days); 
    return result; 
} 
}; 

trigger.fecha_ini(); 
+0

có một cái nhìn tại moment.js – hgoebl

Trả lời

8

làm thế nào tôi có thể tạo ra các đối tượng ngày mà không cần phân tích chuỗi "Y-m-d" thành từng mảnh, hoặc là cách duy nhất?

Trong khi Date.parse sẽ chuyển đổi chuỗi trong y/m/d/định dạng các đối tượng ngày, thủ công phân tích cú pháp là cách hợp lý chỉ:

// s is format y-m-d 
// Returns a date object for 00:00:00 local time 
// on the specified date 
function parseDate(s) { 
    var b = s.split(/\D/); 
    return new Date(b[0], --b[1], b[2]); 
} 

ES5 định một form of ISO 8601 rằng cần được hỗ trợ bởi tất cả các trình duyệt, tuy nhiên nó không được hỗ trợ nhất quán hoặc bởi tất cả các trình duyệt đang sử dụng.

+0

nhờ, vì vậy như tôi tought tôi sẽ phải chia các văn bản, tôi chỉ muốn biết nếu có một vấn đề tốt hơn cho vấn đề. – chagovelez1

+1

Tôi không thể tin đây là câu trả lời đúng. Tại sao HTML5 ?! – cgatian

+0

@cgatian - [* "HTML5" là một buzword *] (https://html.spec.whatwg.org/multipage/introduction.html#is-this-html5?), Nó chỉ là HTML. ;-) Ngày định dạng ISO 8601 được phân tích cú pháp bởi hàm dựng sẵn ngày tháng sẽ được coi là UTC, do đó, người dùng phía tây Greenwich sẽ thấy ngày cho ngày hôm trước. Nhưng HTML muốn họ được coi là "địa phương" ... đi con số. – RobG

2

Với tôi, nó hoạt động mà không cần làm gì cả.

Tôi chỉ viết ngày mới ($ ('# html5dateinput'). Val());

là về nó. Tôi nhận được đối tượng ngày chính xác. Tôi đang sử dụng Google Chrome phiên bản 38 và tôi đã thử nghiệm nó trên Firefox 33 theo Ubuntu 14.04

+0

Điều này có kết quả rất không phù hợp. tại thời điểm thử nghiệm trên Chrome và 'ngày mới (" 2017-10-19 ")' đưa ra ngày chính xác trong GMT trong khi 'new Date (" 2017-10-9 ")' cung cấp ngày trong múi giờ của riêng tôi. – Imme

1

Sử dụng valueAsDate:

valueAsDate
Returns: Date

Returns/Thiết lập giá trị của phần tử, hiểu như là một ngày, hoặc null nếu chuyển đổi là không thể.

Demo:

<input type="date" id="d" value="2018-02-14"> 
 

 
<button onclick="console.log(document.getElementById('d').valueAsDate)"> 
 
change the date (or not) and click me 
 
</button>

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