سؤال

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

إليك سلسلة المثال:

'Sat, 31 Oct 2009 23:48:37 +0000',

ال +0000 بحسب ال api. ( created_at ) يشير إلى أنها بالفعل UTC. وبعد الآن، أنا أستخدم strtotime و date فقط لتأكيد الوقت. مع:

$t = 'Sat, 31 Oct 2009 23:48:37 +0000';
$timestamp = strtotime($t);

echo date('M d Y H:m:s', $timestamp);

انا حصلت Oct 31 2009 19:10:37. وبعد إذا قمت بإزالة +0000 انا حصلت Oct 31 2009 23:10:37. وبعد لذلك الفرق بين وجود +0000 وليس وجود 4 ساعات. أنا أظن بسبب التلقائي المحلي الخاص بي (ميريلاند، الولايات المتحدة الأمريكية = America/New_York ) وهذا يختلف عن UTC من الواضح.

لست متأكدا تماما إذا كان ينبغي أن أرد +0000 أو استخدامه عند محاولة تحديد ما إذا كان هذا الطابع الزمني ضمن نطاق الطابع الزمني المخزن في قاعدة البيانات الخاصة بي، والتي هي 2009-10-30 23:16:38 و 2009-11-25 12:00:00. وبعد أشعر بالسخف والارتباكي قليلا الآن، عندما جاءت هذه الطوابع الطوابع الزمنية YYYY-MM-DD H: M: S من منتقي وقت JavaScript، وهو تنسيق مثال هو 10/31/2009 11:40 am وأنا استخدم str_to_date مثل ذلك:

STR_TO_DATE("10/31/2009 11:40 am", "%m/%d/%Y %l:%i %p")'),

يجب أن أغادر +0000 أو تجريدها؟ الصنابير العقلية خارج

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

المحلول

يجب عليك بالطبع ترك معلومات TIMEZONE في، شريطة أن تكون أيضا بشكل صحيح ضبط خادم الوقت الخادم. وبعد وإلا فما هي النقطة، فإن جميع مقارنات وقتك ستكون 4 ساعات. : س)

لمقارنة الوقت الذي يجب أن تتركه كطابع يونيكس، أي نتيجة strtotime.

$twitterTS    = strtotime('Sat, 31 Oct 2009 23:48:37 +0000');
$localStartTS = strtotime('Sat, 31 Oct 2009 19:00:00'); // timezone is -0400 implicitly
$localEndTS   = strtotime('Sat, 31 Oct 2009 20:00:00');

if ($localStartTS <= $twitterTS && $twitterTS <= $localEndTS) {
    // twitter timestamp is within range
}

لتوضيح: قبل مقارنة الأوقات من وقت مختلف، تأكد من تحويلها جميعا إلى نفس المنطقة. مقارنة بوقت لندن 20:00 إلى New York Time 20:00 بدون معلومات الزمنية ستؤدي إلى نتائج غير صحيحة. strtotime سوف تحويل جميع الأوقات إلى timezone المحلية الخاصة بك؛ إذا كانت معلومات TimeZone موجودة في المدخلات، فسوف تكرمها وتحويل الوقت بشكل مناسب، وإلا فإنه سيفترض أن الوقت محلي بالفعل. إذا كانت جميع الأوقات في قاعدة البيانات الخاصة بك محلية، فيجب عليك التأكد من توطين جميع الطوابع الزمنية التي تريد المقارنة معها.
ستكون استراتيجية بديلة لتحويلها دائما جميع الأوقات إلى UTC قبل تخزينها أو مقارنتها.

خذ اختيارك، فقط أفعل ذلك باستمرار.

نصائح أخرى

في PHP، يمكنك ببساطة استخدام وظيفة Substring لتقسيم وقت JSON Twitter إلى مكوناته

//'Sat, 31 Oct 2009 23:48:37 +0000'
$hour = substring($jsontime,18,2);
$minute = substring($jsontime,22,2);
...

$phpDatetime mktime($hour,$minute,$second,$month,$day,$year);

من هناك أعتقد أن لديك بالفعل. لا تنسى ضبط اختلافات GMT.

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