سؤال

لدي جدول MySQL يعتمد على الطابع الزمني لعصر يونكس المكافئ لتاريخ الإدخال للفرز والتصفية في أجزاء مختلفة من الموقع.أحاول تنفيذ منتقي التاريخ الذي سيُدخل التاريخ في حقل النموذج بتنسيق mm/dd/yyyy.لقد كنت أجد صعوبة في تحويل هذا التاريخ إلى تنسيق عصر يونكس لإضافة هذا الإدخال في حقل الصف.كل المحاولات التي قمت بها أدت إلى إنشاء الطابع الزمني لعصر اليوم الحالي.هل لدى أي شخص أي فكرة عن كيفية أخذ تنسيق التاريخ هذا وتحويله بالطابع الزمني المكافئ له؟

شكرا لك مقدما.

معلومات إضافية:

لقد كنت أحاول mktime، وكل ما أحصل عليه هو عصر اليوم.عذرًا، كان يجب أن أضيف بعض التعليمات البرمجية مسبقًا لتوضيح الأمر بشكل أفضل:

معرف النموذج هو "التاريخ" وحقل قاعدة البيانات هو "العصر"

إليك ما أحاول (دون جدوى) عندما أقوم بنشر التاريخ:

$epochhold = ($_POST['date']);
$epoch = mktime(0,0,0,$epochhold);

أفهم من منشور سابق أن هذا سيظل يقدم القيمة كـ mm/dd/yyyy وليس mm، dd، yyyy كما يتوقع mktime، ولكن المنشور لم يقدم حلاً حول كيفية القيام بذلك.لقد حاولت استخدام str_replace لتغيير "/" إلى ""، وقد أدى ذلك إلى نفس النتيجة - الحصول على تاريخ العصر اليوم بغض النظر عن التاريخ الذي تم إدخاله.

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

$epochhold = ($_POST['date']);
$epochold2 = str_replace('/', ', ', $epochhold)
$epoch = mktime(0,0,0,$epochhold2);

شكرًا على الرد السابق أيضًا، لم أكن أريد أن يمر الرد السريع دون أن يلاحظه أحد!

شكرا لكم جميعا!

شكرًا للجميع على الردود - يبدو أن strtotime يعمل بشكل أفضل في الاختبارات الأولية وقد يكون هو الحل الأمثل لأن هذا التنسيق ثابت في جميع أنحاء الموقع.لكن كل الاقتراحات ساعدت في هذا الأمر، بالإضافة إلى بعض الأشياء الأخرى، لذا شكرًا لكم جميعًا مرة أخرى!

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

المحلول

إذا كنت تعلم أنه سيكون دائمًا بهذا التنسيق، فسيقوم strtotime بتحويله مباشرةً إلى الطابع الزمني لنظام التشغيل Unix.

strtotime($_POST['app_date']);

هث!

نصائح أخرى

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

if ( ! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date']) ) {
    // complain about invalid input
}

list($m, $d, $y) = explode('/', $_POST['date']);
$timestamp = mktime(0, 0, 0, $m, $d, $y);

ستحتاج إلى إرسال dd,mm,yyyy كـ vars منفصل إلى mktime.يأخذ القيمة في $epochold2 كسلسلة واحدة قد تكون غير صالحة لـ mktime.

أفضل رهان لك هو استخدام strtotime كما ذكرت سابقًا، أو اتباع نصيحة Ant P باستخدام mktime.

سترتوتايم () سيتم تحليل أي تنسيق تاريخ تقريبًا وإرجاع الطابع الزمني لنظام Unix.كل ما عليك فعله هو تمرير سلسلة التاريخ/الوقت الخاصة بك:

$unix_time = strtotime($_POST['date']);
if($unix_time < 0) {
    //error case
}
else {
    //value OK!
}

كما ترون أعلاه، يمكنك أيضًا استخدامه للمساعدة في التحقق من صحة الإدخال - إذا أدخل المستخدم تاريخًا مثل 31/02/2008، فسوف يُرجع -1.

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