কোনও টুইগ টেম্পলেটে ডেটটাইম অবজেক্ট কীভাবে রেন্ডার করা যায়


215

আমার সত্তার একটিতে আমার ক্ষেত্রগুলির একটি হ'ল "ডেটটাইম" পরিবর্তনশীল।

ব্রাউজারে রেন্ডার করতে আমি এই ক্ষেত্রটিকে স্ট্রিংয়ে কীভাবে রূপান্তর করতে পারি?

এখানে একটি কোড স্নিপেট:

{% for game in games %}
    ...
        <td> {{game.gameTeamIdOne.teamName}} </td>
        <td> {{game.gameTeamIdTwo.teamName}} </td>
        <td> {{game.gameDate}}</td>
    </tr>
{% endfor %}

আমার সত্তা শ্রেণিতে এখানে পরিবর্তনশীল রয়েছে:

/**
 * @var date $gameDate
 *
 * @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
 */
private $gameDate;

এবং এখানে যে ত্রুটি বার্তাটি পাচ্ছি তা এখানে:

একটি টেম্পলেটটির রেন্ডারিংয়ের সময় একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে ("ক্যাচবাল মারাত্মক ত্রুটি: শ্রেণির ডেটটাইম অবজেক্ট স্ট্রিংয়ে রূপান্তরিত করা যায়নি ... \ অ্যাপ \ ক্যাশে \ দেব \ টুইগ \ 9 বি \ বিজ্ঞাপন \ 58fd3bb1517632badf1fdc7fa4a8.php লাইন 33" ) "বিয়ারবান্ডেল: গেমস: গেমটিবেল। html.twig" 10 নং লাইনে।

উত্তর:


305

যদিও আপনি এটি ব্যবহার করতে পারেন

{{ game.gameDate|date('Y-m-d') }}

যোগাযোগ করুন, মনে রাখবেন যে এই সংস্করণটি ব্যবহারকারী লোকেলকে সম্মান করে না, যা কেবলমাত্র একটি জাতীয়তার ব্যবহারকারীদের দ্বারা ব্যবহৃত সাইটটিতে সমস্যা হওয়া উচিত নয়। আন্তর্জাতিক ব্যবহারকারীদের গেমের তারিখটি সম্পূর্ণ আলাদাভাবে প্রদর্শন করা উচিত, যেমন \DateTimeক্লাস বাড়ানো এবং __toString()এটিতে এমন একটি পদ্ধতি যুক্ত করা যা লোকেলটি পরীক্ষা করে এবং সে অনুযায়ী কাজ করে।

সম্পাদন করা :

একটি মন্তব্যে @ নিক দ্বারা নির্দেশিত হিসাবে , আপনি যদি টুইগের ইন্টেল এক্সটেনশন ব্যবহার করেন তবে আপনার কাছে একটি localizeddateফিল্টার পাওয়া যাবে যা ব্যবহারকারীর লোকেলের তারিখটি দেখায়। এইভাবে আপনি প্রসারিত সম্পর্কে আমার আগের ধারণাটি ফেলে দিতে পারেন \DateTime


45
{{ game.gameDate|date('Y-m-d H:i:s') }}তারিখ এবং সময় জন্য। কয়েক মিনিট ধরে চরিত্র সন্ধান করতে আমার সমস্যা হয়েছিল।
মুরকো

6
টুইগের তারিখ ফাংশন পিএইচপি ফাংশন (টুইগ ডকস থেকে) হিসাবে একই ফর্ম্যাট ব্যবহার করে। অন্য ফর্ম্যাট খুঁজছেন যে কেউ জন্য, php.net/manual/en/function.date.php
জনিএস

9
নাল মানগুলির জন্য সতর্কতা অবলম্বন করুন; অনুরূপ ব্যবহারের ক্ষেত্রে, আমি আজকের তারিখটি দেখতে পাচ্ছি যখন ট্যুইগের ফাংশনটিতে একটি নাল মান পাইপ করা হয় date। আপনার উদাহরণের ভিত্তিতে, আপনাকে এটিকে {% if game.gameDate is not empty %} ... {%endif}
আবদ্ধ

4
স্থানীয়করণ হিসাবে, আপনার DateTimeক্লাসটি বাড়ানো উচিত নয় ! পরিবর্তে, কেবল localizeddateটুইগের জন্য ফিল্টারটি ব্যবহার করুন
নিক ওয়ারটেল

1
{% if game.gameDate %} {{ game.gameDate|date('Y-m-d H:i:s') }} {% endif %}পরামর্শ দেওয়া হবে
ধীররাজ

90

আপনি dateফিল্টার ব্যবহার করতে পারেন :

{{ game.gameDate|date("m/d/Y") }}

3
একদম একমত তোমার সাথে. এটি এমন কিছু যা পূর্বনির্ধারিতভাবে হওয়া উচিত।
tftd

2
@ থমাসডেকস যা আসলে এতটা অদ্ভুত নয়, কারণ কোনও __toString()পদ্ধতিতে এটি জানতে হবে যে কোন বিন্যাসটিকে DateTimeঅবজেক্টে রূপান্তর করতে হবে, এবং সম্ভবত এখানে শত শত সম্ভাব্য বিন্যাস রয়েছে। অবশ্যই, পিএইচপি- format()তে আপনি কোনও DateTimeঅবজেক্টে পদ্ধতিটি ব্যবহার করতে পারেন যা একটি ফর্ম্যাট আর্গুমেন্ট গ্রহণ করে এবং dateফিল্টারটি কেবল সেই পদ্ধতির ট্যুইগ সমতুল্য।
নিক ওয়ারটেল

68

এটি আপনার যে তারিখটি তারিখটি দেখানো হবে তার উপর নির্ভর করে।

স্থির তারিখের ফর্ম্যাট

আপনি যদি কোনও স্থির বিন্যাস প্রদর্শন করতে চান যা সমস্ত লোকেলের জন্য একই (উদাহরণস্বরূপ কোনও পরমাণুর ফিডের জন্য আইএসও 8601 ), আপনার টুইগের dateফিল্টারটি ব্যবহার করা উচিত :

{{ game.gameDate|date('Y-m-d\\TH:i:sP') }}

যা সবসময় নিম্নলিখিত বিন্যাসে একটি ডেটটাইম ফেরত দেবে:

2014-05-02T08: 55: 41Z

dateফিল্টার দ্বারা গৃহীত ফর্ম্যাট স্ট্রিংগুলি হ'ল আপনি পিএইচপি এর date()ফাংশনের জন্য ব্যবহার করবেন । (পার্থক্যটি হ'ল, যতদূর আমি জানি, আপনি পূর্বনির্ধারিত ধ্রুবকগুলি ব্যবহার করতে পারবেন না যা পিএইচপি date()ফাংশনে ব্যবহার করা যেতে পারে )

স্থানীয়করণের তারিখ (এবং সময়)

তবে আপনি যেহেতু এটি ব্রাউজারে রেন্ডার করতে চান, আপনি সম্ভবত এটি ব্যবহারকারীর ভাষা এবং অবস্থানের জন্য স্থানীয়করণযোগ্য একটি মানব-পঠনযোগ্য ফর্ম্যাটে প্রদর্শন করতে চান। নিজে স্থানীয়করণ না করে আপনি এর জন্য ইন্টেল এক্সটেনশনটি ব্যবহার করতে পারেন (যা পিএইচপি'র ইনটেলডিট ফরমেটার ব্যবহার করে )। এটি একটি ফিল্টার সরবরাহ করে localizeddateযা স্থানীয়ীকৃত ফর্ম্যাটটি ব্যবহার করে তারিখ এবং সময়কে আউটপুট দেয়।

localizeddate( date_format, time_format [, locale ] )

এর জন্য যুক্তি localizeddate:

  • date_format: বিন্যাসের একটি স্ট্রিং (নীচে দেখুন)
  • time_format: বিন্যাসের একটি স্ট্রিং (নীচে দেখুন)
  • locale: (alচ্ছিক) কনফিগার করা লোকেলকে ওভাররাইড করতে এটি ব্যবহার করুন। এই তর্কটিকে ডিফল্ট লোকেল ব্যবহার করার জন্য ছেড়ে দিন, যা সিমফনির কনফিগারেশনে কনফিগার করা যায়।

(আরও কিছু রয়েছে, সম্ভাব্য যুক্তিগুলির সম্পূর্ণ তালিকার জন্য ডকগুলি দেখুন )

জন্য date_formatএবং time_formatআপনি নিম্নলিখিত পংক্তি এক ব্যবহার করতে পারেন:

  • 'none' যদি আপনি এই উপাদানটি অন্তর্ভুক্ত করতে না চান
  • 'short' সর্বাধিক সংক্ষিপ্ত শৈলীর জন্য (12/13/52 বা বিকাল সাড়ে 3 টা ইংলিশ লোকালে)
  • 'medium' মাঝারি শৈলীর জন্য (12 জানুয়ারী, 1952 ইংলিশ লোকালে)
  • 'long' দীর্ঘ শৈলীর জন্য (12 জানুয়ারী, 1952 বা 3:30:32 pm ইংলিশ লোকালে)
  • 'full' সম্পূর্ণ নির্দিষ্ট শৈলীর জন্য (মঙ্গলবার, এপ্রিল 12, 1952 খ্রিস্টাব্দের বা 3:30:42 পিএসটি একটি ইংরেজি লোকালে)

উদাহরণ

সুতরাং, উদাহরণস্বরূপ, আপনি যদি সমতুল্য বিন্যাসে তারিখটি প্রদর্শন করতে চান তবে February 6, 2014 at 10:52 AMআপনার টুইগ টেমপ্লেটে নিম্নলিখিত লাইনটি ব্যবহার করুন:

{{ game.gameDate|localizeddate('long', 'short') }}

তবে, আপনি যদি অন্য কোনও লোকেল ব্যবহার করেন তবে ফলাফলটি সেই লোকালের জন্য স্থানীয়করণ করা হবে:

  • 6 februari 2014 10:52জন্য nlলোকেল;
  • 6 février 2014 10:52জন্য frলোকেল;
  • 6. Februar 2014 10:52জন্য deলোকেল; প্রভৃতি

আপনি দেখতে পারেন, localizeddate কেবলমাত্র মাসের নামগুলি অনুবাদ করে না তবে স্থানীয় স্বরলিপিগুলিও ব্যবহার করে। ইংরেজি স্বরলিপিটি মাসের পরে তারিখটি রাখে, যেখানে ডাচ, ফরাসি এবং জার্মান স্বীকৃতিগুলি মাসের আগে রাখে। ইংরেজি এবং জার্মান মাসের নামগুলি বড় হাতের অক্ষর দিয়ে শুরু হয়, যেখানে ডাচ এবং ফরাসি মাসের নামগুলি ছোট হাতের অক্ষর। এবং জার্মান তারিখগুলি একটি বিন্দু সংযোজন করেছে।

লোকেল স্থাপন / সেট করা হচ্ছে

ইন্টেল এক্সটেনশনের জন্য ইনস্টলেশন নির্দেশাবলী এই পৃথক উত্তরে পাওয়া যাবে


1
স্থানীয়করণের তারিখগুলি (এবং সময়) - এই @ দুর্দান্ত - দুর্দান্ত হওয়ার জন্য আপনাকে অনেক ধন্যবাদ!
ওয়েবডিভিউলপার্স

হাই, লোকালাইজডেট ব্যবহার করে, আপনি কীভাবে কেবল এম এবং ওয়াই (দিন নয়) আউটপুট করবেন তা জানেন? থেক্স
মারিও

3

ভুলে যাবেন না

@ORM \ HasLifecycleCallbacks ()

সত্তা:

/**
     * Set gameDate
     *
     * @ORM\PrePersist
     */
    public function setGameDate()
    {
        $this->dateCreated = new \DateTime();

        return $this;
    }

দেখুন:

{{ item.gameDate|date('Y-m-d H:i:s') }}

>> আউটপুট 2013-09-18 16:14:20


2

বর্তমান লোকালে তারিখ প্রদর্শনের জন্য একটি সিমফনি 2 সরঞ্জাম রয়েছে:

{{ user.createdAt|localeDate }} to have a medium date and no time, in the current locale

{{ user.createdAt|localeDate('long','medium') }} to have a long date and medium time, in the current locale

https://github.com/michelsalib/BCCExtraToolsBundle


2
{{game.gameDate | date('c')}}  // 2014-02-05T16:45:22+00:00

টাইমজোন অফসেট সহ পুরো তারিখের সময়ের স্ট্রিংয়ের জন্য।



1

আমি জানি এটি একটি বেশ পুরানো প্রশ্ন, তবে আমি আজ এই প্রশ্নটি পেয়েছি, তবে উত্তরগুলি আমার প্রয়োজনের মতো নয়।

সুতরাং আমার যা প্রয়োজন তা এখানে।

আপনি যদি আমার মতো , বর্তমান তারিখটি দু'পক্ষের মধ্যে প্রদর্শন করতে চান তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

{{ "now"|date("m/d/Y") }}

এটি সম্পর্কে ডকুমেন্টেশন দেখুন:

ডানায় তারিখ


0

নাল ভ্যালুতে ত্রুটি এড়াতে আপনি এই কোডটি ব্যবহার করতে পারেন:

{{ game.gameDate ? game.gameDate|date('Y-m-d H:i:s') : '' }}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.