هل يجب علي استخدام نوع بيانات التاريخ والوقت أو الطابع الزمني في MySQL؟

StackOverflow https://stackoverflow.com/questions/409286

سؤال

هل تنصح باستخدام أ التاريخ والوقت أو أ الطابع الزمني المجال ولماذا (باستخدام MySQL)؟

أنا أعمل مع PHP على جانب الخادم.

هل كانت مفيدة؟

المحلول

وتستخدم

والطوابع في الخلية عموما لتعقب التغييرات على السجلات، وغالبا ما تحدث في كل مرة يتم تغيير السجل. إذا كنت ترغب في تخزين قيمة معينة يجب عليك استخدام حقل التاريخ والوقت.

إذا كنت تعني أنك تريد أن تقرر بين استخدام الطابع الزمني UNIX أو حقل التاريخ والوقت الخلية الأم، والذهاب مع الشكل الأصلي. يمكنك القيام بعمليات حسابية داخل الخلية بهذه الطريقة ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)") وبسيطة لتغيير شكل القيمة إلى الطابع الزمني ("SELECT UNIX_TIMESTAMP(my_datetime)") UNIX عند الاستعلام عن السجل إذا كنت تريد أن تعمل على ذلك مع PHP.

نصائح أخرى

في MySQL 5 وما فوق، الطابع الزمني يتم تحويل القيم من المنطقة الزمنية الحالية إلى UTC للتخزين، ويتم تحويلها مرة أخرى من UTC إلى المنطقة الزمنية الحالية للاسترجاع.(يحدث هذا فقط لنوع البيانات TIMESTAMP، و لا للأنواع الأخرى مثل DATETIME.)

بشكل افتراضي، المنطقة الزمنية الحالية لكل اتصال هي وقت الخادم.يمكن تعيين المنطقة الزمنية على أساس كل اتصال، كما هو موضح في دعم المنطقة الزمنية لخادم MySQL.

وأنا دائما استخدام حقول DATETIME عن أي شيء بخلاف الفوقية صف (تاريخ إنشاؤها أو تعديلها).

المذكورة في وثائق الخلية:

<اقتباس فقرة>   

ويستخدم نوع DATETIME عند الحاجة القيم التي تحتوي على معلومات حديثة والوقت. الخلية يسترجع ويعرض القيم DATETIME في "YYYY-MM-DD HH: MM: SS" الشكل. مجموعة معتمدة '1000/01/01 00:00:00' إلى '9999-12-31 23:59:59'.

     

...

     

ونوع البيانات الطابع الزمني لديها مجموعة من بالتوقيت العالمي '1970-01-01 00:00:01' إلى '2038/01/09 03:14:07' UTC. وقد خصائص متفاوتة، تبعا لإصدار الخلية ووضع SQL هو خادم يعمل في.

وأنت من المحتمل جدا أن تصل إلى الحد الأدنى على الطوابع الزمنية في الاستخدام العام - على سبيل المثال تخزين تاريخ الميلاد.

والأمثلة التالية تبين كيف تغيير نوع تاريخ TIMESTAMP القيم بعد تغيير time-zone to 'america/new_york' حيث DATETIMEis دون تغيير.

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Calcutta       |
+------------------+---------------------+

mysql> create table datedemo(
    -> mydatetime datetime,
    -> mytimestamp timestamp
    -> );

mysql> insert into datedemo values ((now()),(now()));

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+

mysql> set time_zone="america/new_york";

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+

ولقد تحول جوابي في المادة حتى أكثر الناس يمكن العثور على هذا مفيد، <م> <وأ href = "http://www.tech-recipes.com/rx/22599/mysql-datetime-vs-timestamp داتا من نوع / "يختلط =" noreferrer "> الخلية: التاريخ والوقت مقابل أنواع البيانات الطابع الزمني

والفرق الرئيسي هو أن DATETIME ثابت بينما يتأثر TIMESTAMP بـ time_zone جلسة.

لذلك، لا يهم إلا عندما يكون لديك - أو قد يكون لديك في المستقبل - مجموعات متزامنة عبر المناطق الزمنية.

بكلمات أبسط: إذا كانت لدي قاعدة بيانات في أستراليا، وقمت بتفريغ قاعدة البيانات هذه لمزامنة/ملء قاعدة بيانات في أمريكا، فسيتم تحديث TIMESTAMP ليعكس الوقت الحقيقي للحدث في المنطقة الزمنية الجديدة، بينما سيظل DATETIME يعكس الوقت الحدث في المنطقة الزمنية au.

من الأمثلة الرائعة على استخدام DATETIME حيث كان ينبغي استخدام TIMESTAMP في Facebook، حيث لا تكون خوادمهم متأكدة تمامًا من الوقت الذي حدثت فيه الأشياء عبر المناطق الزمنية.ذات مرة كنت أجري محادثة ذكر فيها الوقت أنني كنت أرد على الرسائل قبل إرسال الرسالة فعليًا.(وهذا، بالطبع، قد يكون سببه أيضًا ترجمة المنطقة الزمنية السيئة في برنامج المراسلة إذا تم نشر الأوقات بدلاً من مزامنتها.)

وأنا أتخذ هذا القرار على قاعدة الدلالي.

ويمكنني استخدام الطابع الزمني عندما كنت في حاجة لتسجيل نقطة (أكثر أو أقل) ثابتة في الوقت المناسب. على سبيل المثال عندما تم إدراج سجل في قاعدة البيانات أو عندما استغرق بعض الإجراءات المستخدم المكان.

وأنا استخدم حقل التاريخ والوقت عند يمكن تعيين التاريخ / الوقت وتغيرت بشكل تعسفي. على سبيل المثال عندما يمكن للمستخدم حفظ التعيينات التغيير في وقت لاحق.

والطابع الزمني هو 4 بايت مقابل 8 بايت للDATETIME.

http://dev.mysql.com/doc/ RefMan معلومات / 5.0 / EN / التخزين requirements.html

ولكن كما قلت scronide لا توجد لديها الحد الأدنى من العام 1970. انه لشيء رائع عن أي شيء يمكن أن يحدث في المستقبل على الرغم؛)

أوصي باستخدام لا حقل DATETIME أو TIMESTAMP.إذا كنت تريد تمثيل يوم محدد ككل (مثل عيد ميلاد)، فاستخدم نوع DATE، ولكن إذا كنت أكثر تحديدًا من ذلك، فمن المحتمل أنك مهتم بتسجيل لحظة فعلية بدلاً من وحدة من الوقت (اليوم، الأسبوع، الشهر، السنة).بدلاً من استخدام DATETIME أو TIMESTAMP، استخدم BIGINT، وقم ببساطة بتخزين عدد المللي ثانية منذ العصر (System.currentTimeMillis() إذا كنت تستخدم Java).وهذا له العديد من المزايا:

  1. يمكنك تجنب قفل البائع.تدعم كل قاعدة بيانات تقريبًا الأعداد الصحيحة بطريقة مشابهة نسبيًا.لنفترض أنك تريد الانتقال إلى قاعدة بيانات أخرى.هل تريد القلق بشأن الاختلافات بين قيم DATETIME الخاصة بـ MySQL وكيف تحددها Oracle؟حتى بين الإصدارات المختلفة من MySQL، تتمتع الطوابع الزمنية بمستوى مختلف من الدقة.في الآونة الأخيرة فقط، دعمت MySQL المللي ثانية في الطوابع الزمنية.
  2. لا توجد مشاكل في المنطقة الزمنية.كانت هناك بعض التعليقات الثاقبة هنا حول ما يحدث مع المناطق الزمنية مع أنواع البيانات المختلفة.ولكن هل هذه معرفة شائعة، وهل سيخصص زملائك في العمل الوقت الكافي لتعلمها؟من ناحية أخرى، من الصعب جدًا العبث بتغيير BigINT إلى java.util.Date.يؤدي استخدام BIGINT إلى حدوث الكثير من المشكلات المتعلقة بالمناطق الزمنية.
  3. لا تقلق بشأن النطاقات أو الدقة.لا داعي للقلق بشأن ما سيتم اختصاره بواسطة النطاقات الزمنية المستقبلية (الطابع الزمني يذهب فقط إلى 2038).
  4. تكامل أدوات الطرف الثالث.باستخدام عدد صحيح، يكون ذلك أمرًا تافهًا بالنسبة لأدوات الطرف الثالث (على سبيل المثال.EclipseLink) للتفاعل مع قاعدة البيانات.لن يكون لدى كل أداة خارجية نفس الفهم لـ "التاريخ والوقت" كما تفعل MySQL.هل تريد تجربة ومعرفة ما إذا كان يجب عليك استخدام كائن java.sql.TimeStamp أو java.util.Date في وضع السبات إذا كنت تستخدم أنواع البيانات المخصصة هذه؟إن استخدام أنواع البيانات الأساسية الخاصة بك يجعل استخدامها مع أدوات الطرف الثالث أمرًا تافهًا.

ترتبط هذه المشكلة ارتباطًا وثيقًا بكيفية تخزين قيمة مالية (أي قيمة نقدية).1.99 دولار) في قاعدة البيانات.هل يجب عليك استخدام رقم عشري، أو نوع Money الخاص بقاعدة البيانات، أو الأسوأ من ذلك كله استخدام Double؟جميع هذه الخيارات الثلاثة فظيعة، لنفس الأسباب المذكورة أعلاه.الحل هو تخزين قيمة المال بالسنتات باستخدام BIGINT، ومن ثم تحويل السنتات إلى دولارات عند عرض القيمة للمستخدم.وظيفة قاعدة البيانات هي تخزين البيانات، وليس تفسير تلك البيانات.كل أنواع البيانات الرائعة هذه التي تراها في قواعد البيانات (خاصة Oracle) تضيف القليل، وتبدأ في طريق تقييد البائع.

  1. TIMESTAMP هو أربعة بايت مقابل ثمانية بايت لـ DATETIME.

  2. تكون الطوابع الزمنية أيضًا أخف في قاعدة البيانات ويتم فهرستها بشكل أسرع.

  3. يتم استخدام نوع DATETIME عندما تحتاج إلى قيم تحتوي على معلومات التاريخ والوقت.يقوم MySQL باسترداد وعرض قيم DATETIME بتنسيق "YYYY-MM-DD HH:MM:SS".النطاق المدعوم هو "1000-01-01 00:00:00" إلى "9999-12-31 23:59:59".

يحتوي نوع البيانات TIMESTAMP على نطاق من '1970-01-01 00:00:01' UTC إلى '2038-01-09 03:14:07' UTC.له خصائص مختلفة، اعتمادًا على إصدار MySQL ووضع SQL الذي يعمل فيه الخادم.

  1. DATETIME ثابت بينما يتأثر TIMESTAMP بإعداد المنطقة الزمنية.

واعتمادا على التطبيق، حقا.

والنظر في وضع طابع زمني من قبل المستخدم إلى الخادم في نيويورك، على موعد في Sanghai. الآن عندما يتصل المستخدم في Sanghai، ويصل إلى نفس الطابع الزمني تعيين من خادم معكوسة في طوكيو. سيرى تعيين في الوقت طوكيو، ويقابل من الوقت الأصلي نيويورك.

وهكذا على القيم التي تمثل وقت المستخدم مثل موعد أو جدول زمني، التاريخ والوقت هو أفضل. وهو يتيح للمستخدم للسيطرة على الموعد المحدد والوقت المطلوب، بغض النظر عن إعدادات الخادم. الوقت المحدد هو الوقت المحدد، لا تتأثر المنطقة الزمنية للملقم والمنطقة الزمنية للمستخدم، أو عن طريق التغييرات في الوقت الصيفي الطريقة يتم احتساب (نعم يحدث ذلك التغيير).

من ناحية أخرى، على القيم التي تمثل وقت النظام مثل معاملات الدفع، والتعديلات الجدول أو قطع الأشجار، ودائما استخدام الطوابع. لن يتأثر النظام عن طريق تحريك الخادم إلى منطقة زمنية أخرى، أو عند مقارنة بين الملقمات في المناطق الزمنية المختلفة.

والطوابع هي أيضا أخف على قاعدة البيانات وفهرستها بشكل أسرع.

2016 +:ما أنصح به هو ضبط المنطقة الزمنية لـ Mysql على UTC واستخدام DATETIME:

يمكن لأي إطار عمل أمامي حديث (Angular 1/2، React، Vue،...) تحويل وقت UTC الخاص بك إلى التوقيت المحلي بسهولة وتلقائية.

بالإضافة إلى ذلك:

(ما لم يكن من المحتمل أن تقوم بتغيير المنطقة الزمنية لخوادمك)


مثال مع AngularJs

// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...

// font-end Output the localised time
{{item.my_datetime | date :'medium' }}

كل تنسيق الوقت المترجم متاح هنا:https://docs.angularjs.org/api/ng/filter/date

وحقل timestamp هو حالة خاصة من مجال datetime. يمكنك إنشاء أعمدة timestamp أن لها خصائص خاصة؛ يمكن تعيينها لتحديث نفسها على إما إنشاء و / أو التحديث.

في "أكبر" حيث قاعدة البيانات، timestamp وقد اثنين من حالة خاصة يطلق على ذلك.

ما الحق واحد هو يعتمد كليا على ما تريد القيام به.

والطابع الزمني هو دائما في UTC (أي، ثانية المنقضي منذ 1970-01-01، في UTC)، وخادم MySQL الخاص بك لصناعة السيارات في تحولها إلى التاريخ / الوقت لتوقيت الاتصال. في المدى الطويل، والطابع الزمني هو الطريق للذهاب لأنك تعرف أن البيانات الزمنية الخاصة بك أن تكون دائما في UTC. على سبيل المثال، فلن المسمار التواريخ حتى إذا ترحيل إلى ملقم آخر أو إذا قمت بتغيير إعدادات التوقيت على الخادم الخاص بك.

ملحوظة: توقيت الاتصال الافتراضي هو توقيت الخادم، ولكن هذا يمكن أن (يجب) أن تتغير في كل دورة (انظر SET time_zone = ...)

مقارنة بين DATETIME، TIMESTAMP وDATE

enter image description here

ما هو هذا [.الكسر]؟

  • يمكن أن تتضمن قيمة DateTime أو Timestamp جزءًا من الثواني الكسرية المتزايدة في الدقة حتى الدقة الدقيقة (6 أرقام).على وجه الخصوص ، يتم تخزين أي جزء كسور في قيمة يتم إدخالها في عمود DateTime أو Timestamp بدلاً من التخلص منه.وهذا بالطبع اختياري.

مصادر:

والجدير بالذكر في الخلية يمكنك استخدام شيء على غرار أدناه عند إنشاء أعمدة الجدول الخاص بك:

on update CURRENT_TIMESTAMP

وهذا سيتم تحديث الوقت في كل حالة تعديل على التوالي وفي بعض الأحيان مفيدة جدا لتخزين المعلومات تحرير الماضية. هذا يعمل فقط مع الطابع الزمني، وليس التاريخ والوقت ولكن.

وأود أن دائما استخدام الطابع الزمني يونكس عند العمل مع MySQL و PHP. يستخدم السبب الرئيسي لذلك كونها على طريقة تاريخ في PHP ل الطابع الزمني كمعلمة، لذلك لن يكون هناك توزيع الحاجة.

لتحصل الطابع الزمني يونكس الحالي في PHP، فقط لا time();
وفي الخلية القيام SELECT UNIX_TIMESTAMP();.

من تجربتي، إذا كنت تريد حقل تاريخ يتم فيه الإدراج مرة واحدة فقط ولا تريد أن يكون لديك أي تحديث أو أي إجراء آخر في هذا الحقل المحدد، فانتقل إلى وقت التاريخ.

على سبيل المثال، اعتبر أ user طاولة مع أ تاريخ التسجيل مجال.في هذا user إذا كنت تريد معرفة آخر وقت تم فيه تسجيل الدخول لمستخدم معين، فانتقل إلى حقل الطابع الزمني اكتب حتى يتم تحديث الحقل.

إذا كنت تقوم بإنشاء الجدول من phpMyAdmin سيقوم الإعداد الافتراضي بتحديث الطابع الزمني الحقل عند حدوث تحديث صف.إذا لم يتم تحديث الطابع الزمني الخاص بك بتحديث الصف، فيمكنك استخدام الاستعلام التالي لإجراء الطابع الزمني الحصول على حقل التحديث التلقائي.

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

والبيانات الطابع الزمني التاريخ نوع مخازن والوقت، ولكن في تنسيق UTC، وليس في شكل التوقيت الحالي كما التاريخ والوقت لا. وعند جلب البيانات، الطابع الزمني تحويل مرة أخرى أن في الوقت التوقيت الحالي.

وهكذا نفترض أنك في الولايات المتحدة الأمريكية والحصول على البيانات من الخادم التي لديها منطقة زمنية من الولايات المتحدة الأمريكية. ثم سوف تحصل على التاريخ والوقت وفقا للمنطقة الزمنية الولايات المتحدة الأمريكية. العمود نوع البيانات الطابع الزمني دائما الحصول على تحديثها تلقائيا عندما يتم تحديثها خلافها. لذلك يمكن أن تكون مفيدة لتتبع عندما تم تحديث صف معين آخر مرة.

لمزيد من التفاصيل يمكنك قراءة بلوق وظيفة <م> الطابع الزمني مقابل التاريخ والوقت .

وأنا دائما استخدام الطابع الزمني يونكس، لمجرد الحفاظ على سلامة العقل عند التعامل مع الكثير من المعلومات التاريخ والوقت، وخاصة عند تنفيذ تعديلات على المناطق الزمنية، مضيفا / طرح التواريخ، وما شابه ذلك. عند مقارنة الطوابع الزمنية، وهذا يستبعد العوامل المعقدة من التوقيت ويسمح لك لتجنيب الموارد في معالجة جانب الخادم الخاص بك (سواء كان ذلك رمز التطبيق أو استفسارات قاعدة البيانات) في أنك الاستفادة من الوزن الحساب خفيفة بدلا من أثقل التاريخ والوقت إضافة / مطروحا المهام.

وشيء آخر يستحق النظر:

إذا كنت بناء التطبيق، أنت لا تعرف أبدا كيف يمكن أن يكون البيانات الخاصة بك لاستخدامها أسفل الخط. إذا كنت تصل الرياح الحاجة إلى، مثلا، مقارنة مجموعة من السجلات في مجموعة البيانات الخاصة بك، مع، مثلا، مجموعة من العناصر من API طرف ثالث، ويقولون، ووضعها في الترتيب الزمني، فسوف نكون سعداء لديك يونكس الطوابع الزمنية لالصفوف. حتى إذا قررت استخدام الطوابع الخلية، تخزين الطابع الزمني يونكس كما التأمين.

وحذار من تغيير الطابع الزمني عند القيام عبارة UPDATE على الطاولة. إذا كان لديك جدول مع 'اسم' الأعمدة (VARCHAR)، 'العمر' (الباحث)، و "DATE_ADDED" (الطابع الزمني) وتشغيل العبارة DML التالي

UPDATE table
SET age = 30

وبعد ذلك سيتم تغيير كل قيمة واحدة في عمود "DATE_ADDED" الطابع الزمني الحالي.

المرجع المأخوذ من هذه المادة:

الاختلافات الرئيسية:

يستخدم الطابع الزمني لتتبع التغييرات في السجلات، والتحديث في كل مرة يتم فيها تغيير السجل.يستخدم DATETIME لتخزين قيمة محددة وثابتة لا تتأثر بأي تغييرات في السجلات.

يتأثر TIMESTAMP أيضًا بإعدادات مختلفة مرتبطة بالمنطقة الزمنية.DATETIME ثابت.

قام TIMESTAMP بتحويل المنطقة الزمنية الحالية داخليًا إلى UTC للتخزين، وأثناء الاسترجاع تم تحويلها مرة أخرى إلى المنطقة الزمنية الحالية.DATETIME لا يمكنه فعل هذا.

النطاق الزمني المدعوم:'1970-01-01 00:00:01 ′ UTC إلى' 2038-01-19 03:14:07 ′ UTC RANGE DATETime المدعوم:"1000-01-01 00:00:00" إلى "9999-12-31 23:59:59"

في حالتي، قمت بتعيين UTC كمنطقة زمنية لكل شيء:النظام وخادم قاعدة البيانات وما إلى ذلك.في كل مرة أستطيع.إذا كان عميلي يحتاج إلى منطقة زمنية أخرى، فأنا أقوم بتكوينها على التطبيق.

أفضّل دائمًا الطوابع الزمنية بدلاً من حقول التاريخ والوقت، لأن الطوابع الزمنية تتضمن المنطقة الزمنية ضمنيًا.لذا، نظرًا لأنه في اللحظة التي سيتم فيها الوصول إلى التطبيق من قبل مستخدمين من مناطق زمنية مختلفة وتريد منهم رؤية التواريخ والأوقات وفقًا لمنطقتهم الزمنية المحلية، فإن نوع الحقل هذا يجعل من السهل جدًا القيام بذلك عما لو تم حفظ البيانات في حقول التاريخ والوقت .

كميزة إضافية، في حالة ترحيل قاعدة البيانات إلى نظام بمنطقة زمنية أخرى، سأشعر بثقة أكبر في استخدام الطوابع الزمنية.ناهيك عن المشكلات المحتملة عند حساب الاختلافات بين لحظتين مع تغير الوقت الصيفي بينهما والحاجة إلى دقة تبلغ ساعة واحدة أو أقل.

لذلك، لتلخيص، أنا أقدر هذه المزايا من الطابع الزمني:

  • جاهز للاستخدام على التطبيقات الدولية (المنطقة الزمنية المتعددة).
  • سهولة الهجرات بين المناطق الزمنية
  • من السهل جدًا حساب الفروق (فقط قم بطرح كلا الطوابع الزمنية)
  • لا داعي للقلق بشأن التواريخ داخل/خارج فترة الصيف

لكل هذه الأسباب، أختار حقول UTC والطابع الزمني حيثما أمكن ذلك.وأتجنب الصداع ;)

الفرق الرئيسي هو

  • يعمل الفهرس على الطابع الزمني
  • الفهرس في التاريخ والوقت - لا يعمل

أنظر إلى هذا انشر لرؤية المشاكل المتعلقة بفهرسة التاريخ والوقت

وثمة فرق آخر بين الطابع الزمني والتاريخ والوقت وفي الطابع الزمني لا يمكنك القيمة الافتراضية إلى NULL.

ولقد وجدت فائدة غير مسبوقة في القدرة الطابع الزمني إلى التحديث التلقائي نفسها على أساس الوقت الحالي دون استخدام المشغلات لا داعي لها. هذا مجرد لي رغم ذلك، على الرغم من الطابع الزمني هو UTC مثل قيل.

ويمكن أن تتبع عبر المناطق الزمنية المختلفة، حتى إذا كنت بحاجة لعرض الوقت النسبي على سبيل المثال، UTC الوقت هو ما كنت تريد.

وانا افضل استخدام الطابع الزمني لذلك للحفاظ على كل شيء في شكلها الخام واحد مشترك وتنسيق البيانات في التعليمات البرمجية PHP أو في استعلام SQL الخاصة بك. هناك حالات حيث أنه يأتي في متناول اليدين في التعليمات البرمجية لإبقاء كل شيء في ثوان عادي.

+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
|                                       TIMESTAMP                                       |                                 DATETIME                                 |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes.                                                           | DATETIME requires 8 bytes.                                               |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format.                |
| TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC.    | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ |
| TIMESTAMP during retrieval converted back to the current time zone.                   | DATETIME can not do this.                                                |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose.    | DATETIME is used mostly for user-data.                                   |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+

وأنا أحب الطابع الزمني يونكس، لأنك يمكن تحويلها إلى أرقام وتقلق فقط عن الرقم. بالإضافة إلى إضافة / طرح والحصول على فترات، وما إلى ذلك ثم تحويل النتيجة إلى التسجيل في أي شكل. يجد هذا الرمز على مقدار الوقت في دقائق مرت بين الطابع الزمني من وثيقة، والوقت الحالي.

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);

وA TIMESTAMP يتطلب 4 بايت، في حين أن DATETIME يتطلب 8 بايت.

والطابع الزمني هو مفيد عندما يكون لديك زوار من مختلف البلدان مع مناطق زمنية مختلفة. يمكنك بسهولة تحويل الطابع الزمني إلى أي منطقة زمنية البلاد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top