2009-07-30 37 views
22

Mục tiêu của tôi là chuyển đổi một dấu thời gian từ MySQL thành đối tượng Ngày JavaScript một cách hiệu quả. Dưới đây là đoạn hiện tại của tôi có thể chuyển đổi các timestamp MySQL vào một ngày định dạng trong PHP:Chỉ mục tháng của đối tượng ngày tháng JavaScript bắt đầu bằng 0

<?php 
// formats timestamp into following format: 2009, 7, 30 
$date = date("Y, n, j", strtotime($row["date"])); 
?> 

tôi sau đó sử dụng $date giá trị này cho một biểu đồ sử dụng API biểu đồ của Google mà cần JavaScript ngày đối tượng:

data.setValue(<?=$count;?>, 0, new Date(<?=$date;?>)); 

Vấn đề là đối tượng Ngày tháng bắt đầu chỉ mục tháng với 0 để đầu ra luôn là 1 tháng trước. Cách hiệu quả nhất trong việc giải quyết vấn đề này là gì?

Cảm ơn trước!

+0

tiêu đề của bài đăng này ngụ ý rằng bạn bị sốc khi chỉ mục bằng 0. lol giật gân – Kristian

+0

Bạn nói đúng. Bài đăng này đã được 3 năm trước. Bây giờ tôi nhìn lại nó, nó là loại funny mà tôi đã ngạc nhiên một chỉ số bắt đầu từ 0 =) –

+30

Tôi nghĩ rằng sự ngạc nhiên của bạn là hợp lý trong trường hợp này: một giá trị tháng không được lập chỉ mục là hoàn toàn không trực quan. Những người sáng tạo của Javascript có sự hiện diện của tâm trí để không lập chỉ mục giá trị ngày hoặc giá trị năm cho vấn đề đó (không có năm 0, vì vậy một năm không được lập chỉ mục sẽ bị tắt bởi một). Tại sao logic này không được đưa vào cột tháng là không thể hiểu được. –

Trả lời

17

Bạn có thể ăn ngày constructor một ngày trong dd/mm/yyyy hoặc yyyy/mm định dạng/dd và nó sẽ chuyển đổi nó:

>>> new Date('7/30/2009'); 
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time) 
>>> new Date('2009/7/30'); 
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time) 
+2

Bạn cũng có thể sử dụng định dạng YYYY/MM/DD quá –

+0

Ngọt ngào! Nó đã làm việc. Cảm ơn. –

+1

Cảm ơn người đàn ông này. Tôi đã hoành hành trong nhiều ngày để tự hỏi tại sao người hẹn hò của tôi lại gọi điện vào tháng Bảy. Hóa ra ai đó đã đi đầy lo lắng và quyết định để có được lười biếng với số học con trỏ của họ thực hiện điều này. Để tham khảo vì nó được hỏi xung quanh, lý do mảng trong hầu hết các ngôn ngữ bắt đầu từ số không là do số học con trỏ. Khi bạn cố gắng tìm vị trí bộ nhớ của chuỗi chuỗi có độ rộng cố định, về cơ bản bạn lấy con trỏ cơ sở và thêm chỉ số nhân với chiều dài ô/chuỗi để đưa con trỏ đến giá trị được yêu cầu. 0 * index + base pointer = vị trí cho mục đầu tiên. – Shayne

13

Bạn phải tự trừ số tiền thêm 1 từ số tháng tôi sợ. Đối tượng JS Date là một mớ hỗn độn.

+0

Đó chính là điều tôi sợ. Tôi đã bị sốc khi phát hiện ra điều này! –

+6

Bạn đã bị sốc khi biết JS là một đống lộn xộn của những thứ xấu xí? : D – Svend

+0

Điều này sẽ không hoạt động đối với một số trường hợp –

1

Để có được một ngày trong Date String Representation compatible with the Google Charts DataTable như

"Date(2015,0,31)" // note the quotes from the json string and the 0 for January 

mà không đi qua các hàng truy vấn trong php, bạn có thể có định dạng MySQL nó trực tiếp như thế này:

<?php 
$sql = " 
    SELECT 
     CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
     valuefield 
    FROM 
     table 
    ORDER BY 
     datefield 
"; 
$query = $pdo->query($sql); 
$fetchAll = $query->fetchAll(PDO::FETCH_NUM); // fetch in not-associative array 
array_unshift($fetchAll, [['type'=>'date', 'label'=>'date'], 'value']); // add title row 
$json = json_encode($fetchAll, JSON_NUMERIC_CHECK); 

sau đó trong javascript:

var data = google.visualization.arrayToDataTable(<?php echo($json) ?>); 
Các vấn đề liên quan