سؤال

هدفي هو تحويل الطابع الزمني من 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) ?>);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top