يبدأ فهرس شهر كائن تاريخ JavaScript بالرقم 0
-
05-07-2019 - |
سؤال
هدفي هو تحويل الطابع الزمني من MySQL إلى كائن JavaScript Date بطريقة فعالة.إليكم المقتطف الحالي الذي يحول الطابع الزمني لـ MySQL إلى تاريخ منسق في PHP:
<?php
// formats timestamp into following format: 2009, 7, 30
$date = date("Y, n, j", strtotime($row["date"]));
?>
أنا بعد ذلك باستخدام هذا $date
قيمة للمخطط باستخدام واجهة برمجة تطبيقات الرسوم البيانية من Google والتي تتطلب كائن JavaScript Date:
data.setValue(<?=$count;?>, 0, new Date(<?=$date;?>));
تكمن المشكلة في أن كائن JavaScript Date يبدأ فهرس الشهر بالرقم 0، لذا يكون الناتج دائمًا شهرًا واحدًا مقدماً.ما هي الطريقة الأكثر فعالية للتعامل مع هذه المشكلة؟
شكرا لك مقدما!
المحلول
يمكنك تغذية مُنشئ التاريخ بتاريخ بالتنسيق mm/dd/yyyy أو yyyy/mm/dd وسيقوم بتحويله:
>>> 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)
نصائح أخرى
عليك أن تطرح هذا المبلغ الإضافي يدويًا 1
من رقم الشهر أخشى.كائن JS Date في حالة من الفوضى.
للحصول على موعد في تمثيل سلسلة التاريخ متوافق مع Google Charts DataTable يحب
"Date(2015,0,31)" // note the quotes from the json string and the 0 for January
بدون المرور عبر صفوف الاستعلام في PHP، يمكنك تنسيق MySQL مباشرةً على النحو التالي:
<?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);
ثم في جافا سكريبت:
var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);