سؤال

هل يعرف شخص ما وسيلة للحصول على سلسلة من تاريخ يحتوي على تنسيق التاريخ؟

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

أسأل هذا لأنني أرغب في تحسين هذه الوظيفة التي كتبتها، وعادة ما للحصول على التاريخ مع TimeZone مختلفة من خادم، دون القيام بأشياء معينة

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

آمل أن تجنب التعبيرات العادية لأسباب الأداء، لكنني لا أعرف ما إذا كان هذا ممكنا

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

المحلول

بقدر ما أعرف، لا توجد طريقة مضمونة للعمل إلى الوراء. قد تكون أفضل طريقة محاولة مطابقة التعبيرات العادية مقابل التنسيقات المتوقعة المعروفة (على سبيل المثال \d{2,4}[-/]\d{2}[-/]\d{2} بالنسبة إلى "YMD") ولكن لا يمكنني التفكير في طريقة سهلة للقيام بالمطابقة دون استخدام تعبيرات منتظمة. يجب عليك أيضا التحقق من أن التنسيق المحلي منطقي، ولا يمكنك القيام بالكثير حول التواريخ الغامضة مثل 2nd من مارس 2009، والتي يمكن تمثيلها 09/03/02, 2009-03-02, 02/03/09, 03/02/09, ، او حتى 09/02/03.

نصائح أخرى

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

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>

تنسيق وظيفة PHP () Timestamp لتاريخ ووقت أكثر قابلية للقراءة. جرب هذا الرمز لك

 <?php
    $date=date_create('2014-10-20');
    date_time_set($date,12,20,55);
    echo date_format($date,'Y-m-d H:i:s');
    ?>

أعلم أنه متأخرا، لكن من الأفضل القيام به:

$date = date("Y-m-d");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top