আমি পিএইচপি-র ডেটটাইম ক্লাসে ডেটটাইম-> তারিখটি অ্যাক্সেস করতে পারি না কেন?


95

DateTimeক্লাসটি ব্যবহার করে , যদি আমি নিম্নলিখিত কোডটি চালানোর চেষ্টা করি:

$mydate = new DateTime();
echo $mydate->date;

আমি এই ত্রুটি বার্তা ফিরে পাবেন

বিজ্ঞপ্তি: অপরিজ্ঞাত সম্পত্তি: তারিখের সময় :: $ তারিখ ...

যা বোঝায় না কারণ var_dump()ভেরিয়েবলটি চালানোর সময় $mydateএটি স্পষ্টভাবে দেখায় যে এই সম্পত্তিটি বিদ্যমান এবং এটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য:

var_dump($mydate);

object(DateTime)[1]
  public 'date' => string '2012-12-29 17:19:25' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

এটি কি পিএইচপি-র মধ্যে বাগ আছে বা আমি কিছু ভুল করছি? আমি পিএইচপি 5.4.3 ব্যবহার করছি।


4
ভাল প্রশ্ন. আমি এক মুহুর্তের জন্য ভেবেছিলাম যা আমি কিছুই বুঝতে পারি না।
নিয়মিতমেক

উত্তর:


148

এই হল জ্ঞাত সমস্যা

উপলভ্য তারিখটি আসলে var_dump()এখানে সমর্থনটির একটি পার্শ্ব-প্রতিক্রিয়া - derick@php.net

কিছু কারণে, আপনি সম্পত্তি অ্যাক্সেস করতে সক্ষম হবেন বলে মনে করা হচ্ছে না তবে var_dumpএটি যেভাবেই দেখাতে পারে। আপনি যদি সেই ফর্ম্যাটে সত্যিই তারিখ পেতে চান তবে DateTime::format()ফাংশনটি ব্যবহার করুন ।

echo $mydate->format('Y-m-d H:i:s');

4
কেন কেউ এই সঠিক বিন্যাসটি চান না? এটি মাইএসকিউএল তারিখের মতো একই ফর্ম্যাট।
এলিয়া ইলিয়াশেঙ্কো

@ হেলগা ইলিয়াশেনকো আমি নিশ্চিত যে আমি বুঝতে পেরেছি না। আমি কখনও বলিনি যে কেউ এই সঠিক ফর্ম্যাটটি চায় না।
জেরেমি

যদি var_dump বা মুদ্রণ_r ব্যবহার করা হয় তবে এটি একই।
অ্যান্ডিগ্যাস্কেল

15

কল করার পাশাপাশি DateTime::format()আপনি প্রতিচ্ছবি ব্যবহার করে সম্পত্তি অ্যাক্সেস করতে পারেন:

<?php

$dt = new DateTime();
$o = new ReflectionObject($dt);
$p = $o->getProperty('date');
$date = $p->getValue($dt);

এটি ব্যবহারের চেয়ে সামান্য দ্রুত format()কারণ format()ফর্ম্যাট এমন টাইমস্ট্রিং যা ইতিমধ্যে ফর্ম্যাট হয়ে গেছে। বিশেষত যদি আপনি এটি একটি লুপে বহুবার করেন।

তবে এটি পিএইচপি-র নিয়মিত আচরণ নয়। উপরের মন্তব্যে উল্লিখিত @ নীল হিসাবে ইতিমধ্যে একটি বাগরেপোর্ট ফাইল করা হয়েছে।


2

যেমন অন্য উত্তরের দ্বারা উল্লিখিত হয়েছে, এটি পিএইচপি-র একটি সমস্যা যা আজ অবধি সমাধান হয়নি তবে এটি যদি var_dump()আমার 'পার্শ্ব প্রতিক্রিয়া' হয় তবে আমি নিশ্চিত নই ..

echo ((array) new DateTime())['date']; // Works in PHP 7.

আমি যে বিষয়ে নিশ্চিত তা হ'ল আমাদের যদিDateTime কোথায় ব্যবহার করা হবে তার বৈশিষ্ট্যগুলি যদি এটি উপলব্ধ করা হত। কিন্তু অনেক অভ্যন্তরীণ শ্রেণীর মত তারা না এবং আপনি আপনার কোড ঠিক করতে "হল hacky" বা "glitchy" পদ্ধতি উপর নির্ভর করা উচিত নয়। পরিবর্তে আপনার তাদের API ব্যবহার করা উচিত ।

echo (new DateTime())->format('Y-m-d H:i:s');

আপনি সন্তুষ্ট না হলে আপনি ক্লাসটি প্রসারিত করতে পারেন বা কার্বন ব্যবহার করতে পারেন যা এটি আপনার জন্য প্রসারিত করে।

echo (new Carbon())->toDateTimeString();

আপনি যদি ক্ষতিকারক হয়ে থাকেন তবে কীভাবে var_dump()কোনও বস্তুর জাল আউটপুট তৈরি হয় তা একবার দেখুন__debugInfo()


2

ডেটটাইমের তারিখের সম্পত্তি সুরক্ষিত।

আপনি ফর্ম্যাট ফাংশন সহ তারিখটি প্রদর্শন করতে পারেন।

<?php

try {
    $time = new DateTime();
    echo($time->format("Y-m-d H:i:s"));
} catch (Exception $e) {
}

অথবা আপনি অ্যারেতে রূপান্তর করতে পারেন:

<?php

try {
    $time = (array) new DateTime();
    var_dump($time["date"]);
} catch (Exception $e) {
}

তিনি জানতে চেয়েছিলেন যে কেন তিনি ডেটটাইম অবজেক্টের তারিখের সম্পত্তিটি অ্যাক্সেস করতে পারেননি ... আপনি কোথায় দেখেন যে তিনি একটি সঞ্চিত ডেটটাইম মানগুলি ফর্ম্যাট করতে চেয়েছিলেন? "Ymd H: i: s" হ'ল ডাইনিটের ফর্ম্যাটটিতে তারিখটি ডিফল্ট হয়!
ফিলিপ

অ্যারে রূপান্তর করতে আপত্তি - আপনার প্রস্তাব হিসাবে - সম্ভবত সবচেয়ে সহজ উপায়।
জেফজ

0

সম্পত্তির তারিখটি ঠিকঠাকভাবে কাজ করার আগে আপনি যদি কেবল একটি var_Dump ব্যবহার করেন:

$mydate = new DateTime();
var_Dump($mydate);
echo '<br>';
echo $mydate->date;

এটি সরবরাহ করে:

object(DateTime)#1 (3) { ["date"]=> string(26) "2017-04-11 08:44:54.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" }
2017-04-11 08:44:54.000000

সুতরাং আপনি দেখতে পাবেন যে সম্পত্তিটির তারিখটি এমনকি বস্তুর জন্য বিদ্যমান exists আমি এই আচরণ বুঝতে পারি না। কেবলমাত্র var_Dump মন্তব্য করুন এবং আপনি আবার ত্রুটি পাবেন।


ত্রুটি_বন্দর (0); প্রতিধ্বনি তারিখ ("Ymd H: i: s", স্ট্রোটোটাইম ($ মাইডেট-> তারিখ));
কৌশিক দাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.