2012-01-07 58 views
7

Tôi có một ngày trong định dạng "YYYY/MM/DD" này. Bây giờ tôi muốn lấy ngày từ định dạng này. Làm thế nào tôi có thể nhận được nó bằng cách sử dụng javascript hoặc jquery? Một cách là nàyLấy ngày từ ngày sử dụng jquery/javascript

$(document).ready(function() { 

var d = new Date(); 

alert(d.getDay()); 
}); 

nhưng vấn đề ở đây là d biến chứa ngày ở định dạng này

Sat Jan 07 2012 18:16:57 GMT+0200 (FLE Standard Time) 

Làm thế nào tôi có thể nhận được ngày kể từ ngày ở định dạng trên?


Sau đây là cách chức năng của tôi trông giống như

function dayOfWeek(d) { 
      var dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Sunday'); 
      var currentDate = Math.round(+new Date(d)/1000); 
      var nData = new Date(currentDate); 
      //alert(nData); 
      //alert(nData.getDay()); 
      //var day = d.split("-")[2]; 
      //var t = day.replace("0",""); 
      //alert(t); 
      return dayNames[nData.getDay()]; 
     } 

Những gì tôi đang làm là tôi ngày đi qua dưới dạng "YYYY-MM-DD" và nó chuyển đổi ngày đó để unix timestamp và sau đó tôi có được ngày và sau đó trở về ngày như chủ nhật hoặc thứ hai vv Nhưng ở đây nó chỉ trả lại thứ sáu đó là không chính xác. Khi tôi thay đổi ngày trong ngày nó sẽ trở lại cùng ngày trong mảng.

+0

đọc tại đây để xem cách định dạng ngày giờ http://stackoverflow.com/questions/4802190/how-do-i-format-date-in-jquery-datetimepicker xem câu trả lời Skilldrick –

+0

Tôi đã cập nhật bài đăng của mình kiểm tra nó. Cảm ơn – 2619

+0

xem câu trả lời của tôi ... PS: Bạn quên Thứ Bảy: P –

Trả lời

5

Date Object có phương thức toString xuất ra chuỗi ngày UTC theo định dạng bạn mô tả. Tuy nhiên, Date Object cũng có một loạt các phương pháp khác.

Để có được ngày trong tháng (1-31), bạn sử dụng các phương pháp getDate:

d = new Date().getDate() ; 

chuỗi ngày của bạn có một định dạng đó sẽ không được công nhận bởi các nhà xây dựng Date chuỗi . Kiểm tra dòng này cho giá trị trả về của nó:

var nData = new Date(currentDate) ; 

Nó sẽ trở lại:

"invalid Date" 

Nếu định dạng ngày của bạn (d) là thế này,

"dd-mm-yyyy" 

làm điều này,

var a = d.split("-") ; 
var date = new Date(a[2], (a[1] - 1), a[0]) ; 

điều này nên net bạn làm việc DateObject. Hoặc sử dụng trình cắm thêm datepicker cho jQuery như được mô tả trong số post này.


Link to MDN documentation

+0

Vui lòng không đăng các bài đăng của bạn. –

+0

Sau gần 2 năm bạn chắc chắn đã đọc http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts ngay bây giờ ?! Chỉ cần viết câu trả lời. :) –

+0

[Quản trị viên và mod hỗ trợ "yêu cầu"] (http://stackoverflow.com/questions/8616719/php-ajax-call-not-showing-ie7-or-8#comment-10695989) và [ các câu hỏi thường gặp khá nhiều làm cho nó một quy định anyway] (http://stackoverflow.com/faq#signatures). Phần "yêu cầu" của cuộc thảo luận về meta liên quan nhiều hơn đến cuộc tranh luận về việc liệu tôi có nên làm phiền chỉnh sửa chữ ký của bạn không. –

0

Sản phẩm "định dạng" bạn đang nói về một chuỗi thường xuyên?

sau đó bạn có thể làm điều này

var theDay = theDate.split("/")[2]; 
+0

Vui lòng xem bài đăng cập nhật của tôi để làm cho câu hỏi của tôi rõ ràng hơn. Tôi muốn có được ngày trong tuần và sau đó hiển thị nó vào chủ nhật, định dạng thứ hai. – 2619

1

Về mã mới được cập nhật:

$(function() 
    { 
$("a").click(function() { 
      var dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
      var nData = new Date(); 
      //alert(nData); 
      //alert(nData.getDay()); 
      //var day = d.split("-")[2]; 
      //var t = day.replace("0",""); 
      //alert(t); 
      alert(dayNames[nData.getDay()]); 
     }); 
}); 

mã trên là một ví dụ. Chỉnh sửa http://jsfiddle.net/qgDHB/ theo nhu cầu của bạn.

Tôi đã xóa một số dòng không cần thiết.

2

Thay vì sử dụng tính năng chuyển đổi Ngày thành chuỗi được tạo sẵn, phụ thuộc vào việc triển khai thực hiện và thay vì mã hóa logic, tốt nhất bạn nên sử dụng thư viện phù hợp. Dưới đây là một trong những cách đơn giản để làm nó bằng cách sử Globalize.js:

function dayOfWeek(s) { 
    var d = Globalize.parseDate(s, 'yyyy/M/d'); 
    if(d == null) { 
    return null; 
    } else { 
    return Globalize.format(d, 'dddd'); 
    } 
} 

này sẽ phân tích đầu vào trong YYYY định dạng/MM/DD (với những thay đổi rõ ràng nếu định dạng thực tế của bạn là YYYY-MM-DD), chính xác hơn để các năm có 4 chữ số (yyyy) và tháng (M) và ngày (d) có thể bằng 1 hoặc 2 chữ số (sử dụng MM và dd thay vào đó nếu bạn muốn thực thi 2 chữ số). Sau đó, nó viết ngày để chỉ có ngày trong tuần được viết, như một từ (dddd). Nếu đầu vào không phải là định dạng được chỉ định, hàm trả về null, và tất nhiên bạn nên có một số xử lý lỗi được lên kế hoạch cho trường hợp này. Là một phần thưởng thêm, mã sẽ được toàn cầu hóa sẵn sàng: nếu bạn cần sửa đổi mã để tạo tên bằng ngôn ngữ khác, bạn chỉ cần thêm một lời gọi hàm đặt ngôn ngữ (ngôn ngữ) cho Globalize.js .

1
var d=new Date(); 
var weekday=new Array(7); 
weekday[0]="Sunday"; 
weekday[1]="Monday"; 
weekday[2]="Tuesday"; 
weekday[3]="Wednesday"; 
weekday[4]="Thursday"; 
weekday[5]="Friday"; 
weekday[6]="Saturday"; 

var n = weekday[d.getDay()]; 

check

0

Lấy cảm hứng từ toàn cầu hóa trả lời ở trên, đây là cách để làm điều đó trong Sugar.js thư viện:

<script src="sugar.min.js"></script> 
... 
var test = Date.create(d); 
console.log(test.format("{Weekday}")); 

d có thể ở vô số các định dạng khác nhau (bao gồm cả chuỗi hoặc giây - đối tượng Date-1970 hoặc JS Date) và các lựa chọn định dạng đầu ra đều toàn diện.

Sugar.js được rút gọn 17,9K và được nén (bao gồm tất cả các tính năng khác mà nó thêm vào, không chỉ là các công cụ ngày tháng); đó là khoảng gấp đôi kích thước của Moment.js, phương án mà tôi đã cân nhắc. Nhưng Moment.js không có tương đương với các định dạng {dow} hoặc {weekday}.

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