অনুশীলনে ডায়ালটাইম বনাম টাইমস্ট্যাম্প এবং মাইএসকিউএল এবং পিএইচপি?


24

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

  • বর্তমান তারিখ এবং সময় গ্রাহকরা আমার ওয়েবসাইট থেকে পণ্য কিনে: তারিখের সময়?
  • আমাদের সিস্টেম থেকে গণনা করা তাদের অবস্থান এবং তারিখ / সময় ভিত্তিতে বিতরণের তারিখ এবং সময়: তারিখের সময়?
  • শেষবার তারা তাদের অ্যাকাউন্টে লগ ইন করেছে: টাইমস্ট্যাম্প?

    1. ক্রয়ের তারিখ (বর্তমান তারিখ) এবং তারপরে ডাটাবেসে সঞ্চয় করার জন্য পিএইচপিতে কোডটি কী?
    2. ইন্টারনেটে প্রচুর ব্যাখ্যা পড়ার পরে কীভাবে এগুলির প্রত্যেকটি ব্যবহার করবেন তা দয়া করে বিস্তারিত বলুন, আমি এখনও এটি বেশিরভাগেই পাই না।

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

উত্তর:


29

মাইএসকিউএল টাইমস্ট্যাম্পস :

  • ইউটিসি - তে সংরক্ষণ করা হয়

    এগুলি সঞ্চয়স্থানে ইউটিসিতে রূপান্তরিত হয় এবং পুনরুদ্ধারের সময় আপনার সময় অঞ্চলে ফিরে রূপান্তরিত হয়। আপনি যদি সময় অঞ্চল সেটিংস পরিবর্তন করেন তবে পুনরুদ্ধার করা মানগুলিও পরিবর্তন হয়।

  • স্বয়ংক্রিয়ভাবে আরম্ভ এবং আপডেট করা যেতে পারে

    আপনি তাদের ডিফল্ট মান এবং / অথবা স্বয়ংক্রিয় আপডেট মান সেট করতে পারেন CURRENT_TIMESTAMP

  • একটি পরিসীমা 1970-01-01 00:00:01 UTCআছে2038-01-19 03:14:07 UTC

যেখানে মাইএসকিউএল ডেটটাইম :

  • আপনি যা সঞ্চয় করেন তা হ'ল ™

  • একটি পরিসীমা 1000-01-01 00:00:00আছে9999-12-31 23:59:59

    সীমার বাইরে মানগুলি কাজ করতে পারে - তবে কেবলমাত্র সীমার মধ্যে থাকা মানগুলি কাজের গ্যারান্টিযুক্ত

  • দিন বা মাসের শূন্য যেখানে আপনি তারিখগুলি সঞ্চয় করতে পারেন।

    জন্মদিনের সংরক্ষণের এটি মাইএসকিউএল উপায়! TIMESTAMPশূন্য মানের একমাত্র ব্যতিক্রম ব্যতীত আপনি এটি দিয়ে করতে পারবেন না 0000-00-00

  • আপনি যদি অবৈধ তারিখগুলি দরকার হয় তবে এগুলি ALLOW_INVALID_DATES মোডে সঞ্চয় করতে পারেন ।

  • আপনি NOW()কিছু ক্ষেত্রে ডিফল্ট মান সেট করতে পারেন , তবে স্বয়ংক্রিয়ভাবে আরম্ভ করা এবং আপডেট হওয়া তারিখগুলির পছন্দনীয় এবং আরও প্রাকৃতিক উপায় TIMESTAMP

এবং অবশ্যই আছে DATEএবং TIME, যা ঠিক মত কাজ করে DATETIME, কিন্তু অবশ্যই DATEসময় TIMEযত্ন করে না এবং তারিখের যত্ন নেয় না। সমস্ত চারটি ডেটা টাইপ ডেট এবং টাইম ফাংশনের বিস্তৃত অ্যারের সাথে পুরোপুরি কাজ করে , তবে আপনি যখন ডেটা টাইপ মেশাচ্ছেন তখন আপনাকে রূপান্তর প্রভাব সম্পর্কে সচেতন হওয়া উচিত ।

এখন, আপনার প্রশ্নের কাছে: আপনার DATETIMEসর্বত্র ব্যবহার করা উচিত । প্রযুক্তিগত কারণে নয়, তবে যেহেতু আপনি এখনও মাইএসকিউএল কীভাবে কাজ করেন সে সম্পর্কে অস্পষ্ট, DATETIMEতাই সহজ বিকল্প। এর অর্থ হ'ল সংরক্ষণ করার আগে আপনাকে পিএইচপি-তে বর্তমান টাইমস্ট্যাম্পটি গণনা করতে হবে, এটি এতটা সহজ:

$mysqldate = date("Y-m-d H:i:s"); 

পিএইচপি এর তারিখ ফাংশন এর মতো কাজ করে:

string date ( string $format [, int $timestamp = time() ] )

"Y-m-d H:i:s"বিন্যাস এক মাইএসকিউএল এবং দ্বিতীয় প্যারামিটারটি খালি রেখে সামঞ্জস্যপূর্ণ, date()কল time()বর্তমান পেতে ইউনিক্স টাইমস্ট্যাম্প

এর TIMESTAMPপরিবর্তে ব্যবহার করে DATETIMEমাইএসকিউএলের অতিরিক্ত মূল্য রয়েছে বর্তমান টাইমস্ট্যাম্পের সিদ্ধান্ত নেওয়ার দায়িত্ব গ্রহণ করা এবং আপনি সন্নিবেশ / আপডেট করার সময় আপনি ক্ষেত্রটি এড়িয়ে যেতে পারেন। তবে যেহেতু আপনি ইতিমধ্যে একটি কোয়েরি প্রেরণ করছেন এবং পিএইচপি-তে বর্তমান টাইমস্ট্যাম্প পাওয়ার কোডটি ন্যূনতম, আপনি নিরাপদে DATETIMEসবকিছুর সাথে যেতে পারেন ।

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


হুম, আপনি কীভাবে মাইএসকিউএল-এ আপনার কোয়েরি পাঠিয়েছেন বা আপনার টেবিল কাঠামোতে সমস্যা হতে পারে ... স্ট্যাকওভারফ্লো এই ধরণের সমস্যার জন্য আরও ভাল জায়গা, আপনার টেবিলের কাঠামো এবং আপনার সম্পূর্ণ পিএইচপি কোড সহ একটি প্রশ্ন পোস্ট করুন এবং সমস্যাটি কী এবং আপনি ইতিমধ্যে কী চেষ্টা করেছেন সে সম্পর্কে কিছু বিশদ। আমরা বাস্তবায়নের নির্দিষ্টকরণগুলি এখানে এখানে সত্যই আলোচনা করি না ...
ইয়ানিস

আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমি $ mysqldate = তারিখ ("Ymd H: i: s") ব্যবহার করার চেষ্টা করেছি; ph কোয়েরি = আমার পিএইচপি কোডে সারণি ভ্যালু ('"। $ mysqldate।"') লিখুন তবে এটি মাইএসকিউএলে 0000-00-00 00:00:00 তারিখ (ক্ষেত্র) - ডেটটাইম (ডেটাটাইপ) হিসাবে রাখা হবে। আমি বর্তমান তারিখ এবং সময় সংরক্ষণ করার ইচ্ছা করি। আমি যদি ডেটাবেজে টাইমস্ট্যাম্প হিসাবে ডেটাটাইপ সেট করি, পিএইচপি কীভাবে কোড করব?
মডিউলার

এই মুহুর্তে আমাকে স্ট্যাকওভারফ্লোতে কোনও মন্তব্য পোস্ট করার অনুমতি নেই। কিছুটা লজ্জা লাগছে কিন্তু তারা আমার সাথে এইভাবে করেছিল।
মডিউলার

এর জন্য আমি দুঃখিত, তবে আপনি যদি অস্থায়ী স্থগিতাদেশের मोडটিতে থাকেন তবে অবশ্যই একটি ভাল কারণ থাকতে হবে। কোড সম্পর্কে আপনার মন্তব্যে একটি সম্ভাব্য ত্রুটি হ'ল আপনি ক্ষেত্রটির নামকরণ করছেন যেমনটি ডেটাটাইপের Dateজন্য একটি সংরক্ষিত শব্দ DATEএবং অদ্ভুত জিনিসগুলি ঘটতে পারে (মাইএসকিউএল সংস্করণের উপর নির্ভর করে), তাই এর মতো নামকরণ করার চেষ্টা করুন creationdateএবং দেখুন কী ঘটে । এছাড়াও, পিএইচপি থেকে আপনার TIMESTAMPক্ষেত্রগুলি ক্ষেত্রের মতো একই আচরণ করা উচিত DATETIME, এটি সত্যিই কিছু যায় আসে না। তাদের ফর্ম্যাট একই।
ইয়ান্নিস

অসংখ্য ধন্যবাদ. এটির কারণ খুঁজে বের করার চেষ্টা করে প্রায় পুরো রাত কাটিয়ে এখন এটি সাজানো হয়েছে। :)
মডিউলার

2

এই নিবন্ধ থেকে রেফারেন্স নেওয়া:

প্রধান পার্থক্য:

TIMESTAMP রেকর্ডে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হত এবং রেকর্ড পরিবর্তিত হয়ে গেলে প্রতিবার আপডেট হয়। DATETIME নির্দিষ্ট এবং স্ট্যাটিক মান সঞ্চয় করতে ব্যবহৃত যা রেকর্ডগুলির কোনও পরিবর্তন দ্বারা প্রভাবিত হয় না।

TIMESTAMP এছাড়াও বিভিন্ন TIME ZONE সম্পর্কিত সেটিং দ্বারা প্রভাবিত। DATETIME ধ্রুবক।

TIMESTAMP সংগ্রহের জন্য অভ্যন্তরীণভাবে বর্তমান সময় অঞ্চলটিকে ইউটিসিতে রূপান্তরিত করে এবং পুনরুদ্ধারের সময় বর্তমান সময় জোনে রূপান্তরিত হয়। DATETIME এটি করতে পারে না।

টাইমস্ট্যাম্প সমর্থিত ব্যাপ্তি: '1970-01-01 00:00:01 ′ ইউটিসি থেকে' 2038-01-19 03:14:07 ′ ইউটিসি ডেটটাইম সমর্থিত পরিসীমা: '1000-01-01 00:00:00 ′ থেকে' 9999 -12-31 23:59:59 ′


1
সুতরাং 2040 সালে আপনি রেকর্ডগুলির পরিবর্তনের জন্য কী ব্যবহার করবেন, টাইমস্ট্যাম্প? আমি মনে করি না.
বিসিয়েন

-1

ভাল আমি এটিকে খুব সাধারণ উপায়ে দেখি। আপনার ক্ষেত্রে আমি উভয় datetimeএবং ব্যবহার করব timestamp। উভয় ব্যবহারের সাথে আপনার ডেটা বা এর মতো কিছু সংরক্ষণের জন্য কোনও অতিরিক্ত সমস্যা হবে না। আপনার টেবিলের একটি অতিরিক্ত ক্ষেত্র (কলাম) এছাড়াও কোনও বড় সমস্যা নয়।

আমার দৃষ্টিভঙ্গি এবং অভিজ্ঞতার দৃষ্টিতে এখন পর্যন্ত আমি সাধারণত দুটিই ব্যবহার করি। আপনি যখন আপনার দর্শকের কাছে কোনও তারিখ প্রদর্শন করতে চান বা দর্শকদের কাছে এটি বোধগম্য করতে চান তখন তারিখের সময় বিন্যাসে একটি তারিখ প্রদর্শন করুন।

ডেটটাইম ফর্ম্যাট এমন ব্যথা হতে পারে যখন আপনি কোনও কিছু গণনা করতে চান (২ তারিখের মধ্যে পার্থক্য রয়েছে, বর্তমান তারিখ থেকে গতকালের তারিখ পান, বর্তমান তারিখ থেকে 1 সপ্তাহ আগে পান, আগামীকাল তারিখ বা এরকম কিছু পান।) এটি আসলে খুব কঠিন নয় তবে আপনি সাধারণত এগুলিকে রূপান্তর করতে হবে timestampএবং তারপরে স্টাফটি করতে হবে। এবং হ্যাঁ বর্তমান তারিখের সময় উদাহরণস্বরূপ আপনি সাথে পান: $current = date("Y-m-d");বা $current = date("Y-m-d H:i:s");আপনি যদি ঘন্টা, মিনিট এবং সেকেন্ডও চান তবে।

টাইমস্ট্যাম্পটি কেবলমাত্র 11 সংখ্যার দীর্ঘ, যা আসলে কোনওভাবেই "মানে" হয় না। আপনি যখন এটি তাকান আপনি কোন তারিখটি প্রতিনিধিত্ব করেন তা জানতে পারবেন না। সুতরাং এটি প্রকৃতপক্ষে ব্যবহারকারী বান্ধব নয় এবং আপনি এটি কেবল এটি প্রতিধ্বনিত করতে এবং উদাহরণস্বরূপ আপনার দর্শকদের কাছে এটি ব্যবহার করতে পারবেন না। আপনার এটিকে পাঠযোগ্য কিছুতে "রূপান্তর" করতে হবে। তবে এটি আপনাকে সহজেই এটি রূপান্তর করতে এবং বিভিন্ন তারিখ গণনা করার ক্ষমতাও দেয়। উদাহরণস্বরূপ, যদি আপনি আগামীকাল একই সময়ে টাইমস্ট্যাম্প পেতে চান তবে আপনি কেবল বর্তমান তারিখে সেকেন্ডের সংখ্যা যুক্ত করেছেন এবং আপনার কালকের স্ট্যাম্প রয়েছে। উদাহরণ: $tomorrow = time()+24*3600;আপনি খুব সহজেই সেকেন্ডে দুটি তারিখ বা এর মতো যে কোনও কিছুর মধ্যে পার্থক্য পেতে পারেন।

সুতরাং আমি উভয় ডেটটাইম এবং টাইমস্ট্যাম্প ব্যবহার করার পরামর্শ দেব। এমনকি যদি আপনি PhpMyadmin উদাহরণস্বরূপ ব্যবহার করেন এবং দ্রুত কিছু ডেটা সন্ধান করতে চান তবে আপনি যখন তারিখের সময়ের বিন্যাসে একটি তারিখ দেখেন তখন এটি আপনার পক্ষে সহজ হবে (উদাহরণস্বরূপ 2011-12-20 10:15:20:) আপনি যদি কেবল ১১ ডিজিট সংখ্যাটি দেখেন তবে তা হবে। সুতরাং উভয় ব্যবহার করুন এবং তারপরে কল করুন এবং যাকে আপনার আরও ভাল মানায় তা ব্যবহার করুন।

যদি আপনি অবশ্যই বা একটি চয়ন করতে চান তবে আমি টাইমস্ট্যাম্পের পরামর্শ দেব অন্যথায় উভয়টিই ব্যবহার করুন।


1
-১ Timestamp is just a number 11 digit long which doesn't really "mean" anythingমাইএসকিউএল টাইমস্ট্যাম্পগুলি ডেটটাইমের মতো একই ফর্ম্যাটে সংরক্ষণ করা হয়। আপনার সেগুলি পিএইচপি টাইমস্ট্যাম্পগুলিতেও রূপান্তর করতে হবে, আপনার বর্ণিত গণনাগুলি করতে, বা কেবল মাইএসকিউএল এর অনেকগুলি তারিখ / সময় ফাংশন ব্যবহার করতে হবে এবং ডাটাবেসে গণনাগুলি করতে হবে। আপনার উত্তরটি সত্যই বোঝায় না।
ইয়ানিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.