التقدم عبر التواريخ النسبية باستخدام strtotime()

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

  •  08-06-2019
  •  | 
  •  

سؤال

أحاول استخدامها strtotime() للرد على زر انقر للتقدم بـ -1 و+1 يومًا (زرين) مقارنة باليوم المتقدم للنقرة السابقة.

مثال:

  • إنه اليوم العاشر من الشهر، قمت بالنقر فوق الزر "-1 يوم"، والآن يظهر التاريخ على أنه اليوم التاسع.
  • قمت بالنقر فوق الزر "-1 يوم" مرة أخرى والآن تشير القراءة إلى اليوم الثامن.
  • قمت بالنقر فوق الزر "+1 يوم" والآن تشير القراءة إلى أنه اليوم التاسع.

أفهم الأزرار وعرض التاريخ والاستخدام $_GET وPHP لتمرير المعلومات، ولكن كيف يمكنني الحصول عليها strtotime() للعمل على التاريخ النسبي من آخر مرة تم فيها استدعاء البرنامج النصي للسفر عبر الزمن؟

لقد سمح لي عملي حتى الآن بإظهار الأمس واليوم بالنسبة إلى الآن ولكن ليس نسبة إلى، على سبيل المثال، أول أمس, ، أو ال بعد غد.أو إذا كنت أستخدم "الاثنين الماضي" الزر، في اليوم السابق أو التالي مهما كان ذلك اليوم.

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

المحلول

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

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

مثال

http://www.site.com/addOneDay.php?date=1999-12-31

<?php
   echo Date("Y-m-d",(strtoTime($_GET[date])+86400));
?>

يرجى ملاحظة أنه يجب عليك التحقق للتأكد من أن isset($_GET[date]) قبل ذلك أيضًا

إذا كنت تريد حقًا العمل من الاستدعاءات السابقة لنفس البرنامج النصي، فسيتعين عليك القيام بذلك من خلال الجلسات، لذا يرجى تحديد ما إذا كان هذا هو الحال.

نصائح أخرى

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

int strtotime  ( string $time  [, int $now  ] )

يمكنك أن ترى في تعريف الدالة هنا لـ strtotime، الوسيطة الثانية هي الآن، أي.يمكنك تغيير التاريخ الذي هو نسبي منه.

قد يكون من الأسهل عرض ذلك من خلال حلقة سريعة

سيتم تكرار هذا خلال الأيام العشرة الأخيرة باستخدام "أمس" كوسيطة أولى.ثم نستخدم التاريخ لطباعته.

$time = time();

for ($i = 0; $i < 10; $i++) {
    $time = strtotime("yesterday", $time);
    print date("r", $time) . "\n";
}

لذا قم بتمرير الوقت/التاريخ عبر URI حتى تتمكن من حفظ التاريخ النسبي.

وبعد لحظة من الإلهام ظهر لي حل سؤالي (كنت أقود دراجتي).الجزء "$الآن" من

strtottime( string $time {,int $now ]) 

يجب تعيينه كتاريخ حالي.ليس "$time()-now"، ولكن "التاريخ الحالي الذي أهتم به/أبحث عنه في السجل الخاص بي.

أي:إذا كنت ألقي نظرة على ملخص الجدول الزمني ليوم 10/8/2008، فهذا يعني "الآن" وفقًا لـ strtotime();أمس هو 8/09 وغداً هو 8/11.بمجرد أن أتسلل يومًا ما، "الآن" هو 11/8، أمس هو 10/8، وغدًا هو 12/8.

إليك مثال الكود:

<?php

//catch variable
$givendate=$_GET['given'];

//convert given date to unix timestamp
$date=strtotime($givendate);
echo "Date Set As...: ".date('m/d/Y',$date)."<br />";

//use given date to show day before
$yesterday=strtotime('-1 day',$date);
echo "Day Before: ".date('m/d/Y',$yesterday)."<br />";

//same for next day
$tomorrow=strtotime('+1 day',$date);
echo "Next Day: ".date('m/d/Y',$tomorrow)."<br />";
$lastmonday=strtotime('last monday, 1 week ago',$date);
echo "Last Moday: ".date('D m/d/Y',$lastmonday)."<br />";

//form
echo "<form method=\"get\" action=\"{$_SERVER['PHP_SELF']}\">";

//link to subtract a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$yesterday)."\"><< </a>";

//show current day
echo "<input type=\"text\" name=\"given\" value=\"$givendate\">";

//link to add a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$tomorrow)."\"> >></a><br />";

//submit manually entered day
echo "<input type=\"submit\" name=\"changetime\" value=\"Set Current Date\">";

//close form
echo "<form><br />";
?>

يؤدي النقر فوق "<<" و">>" إلى تقدم وتراجع اليوم المعني

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