একটি তারিখে এক দিন যুক্ত করা হচ্ছে


172

আমার কোডটিতে একটি দিন যোগ করার 2009-09-30 20:24:00তারিখ যোগ করার আগে একটি তারিখ ফেরত দেয়: একদিন যোগ করার পরে তারিখটি পরের মাসে রোল করা উচিত:1970-01-01 17:33:29

<?php

    //add day to date test for month roll over

    $stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));

    echo 'date before day adding: '.$stop_date; 

    $stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));

    echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>

আমি আগে বেশ অনুরূপ কোড ব্যবহার করেছি, আমি এখানে কী ভুল করছি?

উত্তর:


333
<?php
$stop_date = '2009-09-30 20:24:00';
echo 'date before day adding: ' . $stop_date; 
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day'));
echo 'date after adding 1 day: ' . $stop_date;
?>

পিএইচপি 5.2.0+ এর জন্য, আপনি নিম্নলিখিত হিসাবেও করতে পারেন:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s'); 
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');

3
ধন্যবাদ। এটিকে সমাধান করুন: $ স্টপ_ডেট = তারিখ ('ইয়ামডি এইচ: আই: এস', স্ট্রোটোটাইম ("$ স্টপ_ডেট + 1 দিন"));
আয়ান

11
আপনার স্ট্রিংয়ে ভেরিয়েবল ব্যবহার করা উচিত নয়। আপনার ব্যবহার করা উচিত: date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));@ w35l3y আপনাকে যে উত্তর দিয়েছে সে হিসাবে
ক্যাস ব্লিম

এই কোডটি চালানোর আগে আপনার ডেট_ডেফল্ট_টাইমজোন_সেট ফাংশনে একটি কল যুক্ত করা উচিত। উদাহরণস্বরূপ তারিখ_দেফফল_টাইমজোন_সেট ('ইউরোপ / রোম') যুক্ত করুন;
লুকা মাস্ত্রস্টেফানো

96
$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";

6
এটি একটি আরও সাম্প্রতিক-দক্ষ সমাধান।
কাস ব্লিম

... যতক্ষণ না এটি আপনার হোস্ট চালানোর সময় মারাত্মক ত্রুটি সৃষ্টি করে না;)
হেনরিক এরল্যান্ডসন

ক্ষমা চাইবেন না। কিছু লোক আপনার করার 3 বছর পরে ডেম উত্তর পোস্ট করেছে
মাওগ বলেছেন মনিকা

1
এই কোডটি চালানোর আগে আপনার ডেট_ডেফল্ট_টাইমজোন_সেট ফাংশনে একটি কল যুক্ত করা উচিত। উদাহরণস্বরূপ তারিখ_দেফফল_টাইমজোন_সেট ('ইউরোপ / রোম') যুক্ত করুন;
লুকা মাস্ত্রস্টেফানো

@ লুকামাস্ট্রোস্টেফানো না, আপনার সার্ভারে টাইমজোন সেট করা উচিত ...
এমএইচ

28

সহজ সমাধান:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');

আমি আপনার ওয়ান লাইনেরে পছন্দ করিecho (new DateTime('+1 day'))->format('Y-m-d H:i:s');
আবা

@ আবা আমি মনে করি না যে আপনার একটি লাইনার পিএইচপি-র পুরানো সংস্করণগুলিতে কাজ করে কারণ আমি এটি চেষ্টা করেছিলাম এবং আমার একটি ত্রুটি হয়েছিল:Unexpected T_OBJECT_OPERATOR” error in PHP
জাচারি ওয়েক্সেলবাউম

25

এটি আমার জন্য কাজ করেছে: বর্তমান তারিখের জন্য

$date = date('Y-m-d', strtotime("+1 day"));

যে কোনও তারিখের জন্য:

date('Y-m-d', strtotime("+1 day", strtotime($date)));

2
ধন্যবাদ এটি আমার জন্য কাজ করেছে। সব সমাধান দেওয়া সহজ।
পুনেতে ভার্মা

2
আপনার পুনরাবৃত্তি এবং বাসা করার দরকার নেই strtotime()- এটি এক কলের মধ্যে সবকিছু পরিচালনা করতে পারে:date('Y-m-d', strtotime($date . " +1 day"));
বিলিএনওহ

2
ভাল, এটি সহজ সমাধান! আপনাকে ধন্যবাদ
অ্যাঞ্জেল


6

পড়তে এবং বুঝতে সহজ উপায়:

$original_date = "2009-09-29";

$time_original = strtotime($original_date);
$time_add      = $time_original + (3600*24); //add seconds of one day

$new_date      = date("Y-m-d", $time_add);

echo $new_date;

3
দিনের দৈর্ঘ্য 24 ঘন্টা না হলে এটি কখনও কখনও দিবালোকের সঞ্চয়ী পরিবর্তনগুলিতে ব্যর্থ হয়।
নিক দাও

3

আমি সর্বদা মাত্র 86400 (এক সেকেন্ডে) যুক্ত করি:

$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400);

echo 'date after adding 1 day: '.$stop_date; 

এটি সম্ভবত আপনি এটি করতে পারেন এমন সবচেয়ে সহজ উপায় নয়, তবে এটি কার্যকর হয়!


লিপ সেকেন্ডের সাথে কীভাবে ডিল করবেন যখন 86400 যুক্ত করা সেদিন 86401 সেকেন্ডের মতো কাজ করবে না? (ঠিক আছে, আমি জানি এটি প্রতি কয়েক বছর পরে ঘটে থাকে তবে অ্যাপের উপর নির্ভর করে এটি গুরুত্বপূর্ণ হতে পারে)
গ্লেন

1
সমস্ত দিন তাদের মধ্যে 86400 সেকেন্ড নেই। আসলে, মার্কিন যুক্তরাষ্ট্রে বেশিরভাগ জায়গায় বছরে দু'বার 3600 কম বা অতিরিক্ত সেকেন্ড রয়েছে।
পিটার কোভাকস

1
"ইউনিক্স সময়" যেহেতু আপনি নিরাপদে লিপ সেকেন্ড উপেক্ষা করতে পারেন। এটি কিছুটা জটিল, তবে আরও তথ্যের জন্য এই নিবন্ধটি পড়ুন: derickrethans.nl/leap_seconds_ এবং_ কী_ থেকে_ডো_উইথ_থাম.এফপি
ক্রিশ্চিয়ান দাভেন

2
আপনার এই সমাধানটি এড়ানো উচিত। এখানে কেন stackoverflow.com/questions/2613338/...
mspir

1
আগের দিনটিতে 86400 সেকেন্ড যোগ করে তারিখটি যুক্ত করবেন না! আপনার কোডে বাগ থাকবে! এটি দিবালোক সংরক্ষণের দিনগুলিতে কাজ করে না!
sbrbot

1

আমি যখন ডগ হেইসের জবাবের সাথে একমত হই, আমি এখানে চিমে বলব যে আপনার কোডটি কাজ না করার কারণ হ'ল স্ট্রোটোটাইম () একটি আইএনটি ২ য় আর্গুমেন্ট হিসাবে প্রত্যাশা করে, একটি স্ট্রিং নয় (এমনকি এটি একটি তারিখের প্রতিনিধিত্ব করে)

আপনি যদি সর্বাধিক ত্রুটির প্রতিবেদন চালু করেন তবে আপনি এটি "একটি অ-সুগঠিত সংখ্যাসূচক মান" ত্রুটি হিসাবে দেখতে পাবেন যা E_NOTICE স্তর।


1

modify()পদ্ধতি একটি বিদ্যমান করার বাড়তি যোগ করার জন্য ব্যবহার করা যেতে পারে DateTimeমান।

DateTimeবর্তমান তারিখ এবং সময় দিয়ে একটি নতুন অবজেক্ট তৈরি করুন :

$due_dt = new DateTime();

আপনার কাছে একবার DateTimeঅবজেক্ট হয়ে গেলে , আপনি সময়সীমা যোগ বা বিয়োগ করে এর মানটি পরিচালনা করতে পারেন:

$due_dt->modify('+1 day');

আপনি পিএইচপি ম্যানুয়াল আরও পড়তে পারেন ।


0

নিম্নলিখিত কোডটি চলতি বছরের জানুয়ারীর প্রথম দিন পান (তবে এটি অন্য তারিখ হতে পারে) এবং সেই দিনটিতে 365 দিন যুক্ত করুন (তবে এটি দিনগুলির সংখ্যা হতে পারে) এর তারিখটাইম ক্লাস এবং তার পদ্ধতিটি সংশোধন করে () এবং বিন্যাস ( ):

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');

0

আপনার কোডটিতে কী কী আছে তার জবাব আপনার কাছে ইতিমধ্যে রয়েছে বলে আপনি সাধারণত ডেটটাইমগুলির সাথে কীভাবে খেলতে পারেন তার বিষয়ে আমি আরও একটি দৃষ্টিভঙ্গি আনতে পারি এবং আপনার সমস্যাটি বিশেষভাবে সমাধান করতে পারি।

প্রায়শই আপনি নিজেকে সমাধানের ক্ষেত্রে একটি সমস্যা হিসাবে দেখেন। এটি আপনাকে একটি অত্যাবশ্যক কোড দিয়ে শেষ করার একটি কারণ । যদিও এটি কাজ করে দুর্দান্ত; আরও কিছু আছে, যুক্তিযুক্তভাবে আরও রক্ষণাবেক্ষণযোগ্য বিকল্প। এর মধ্যে একটি হ'ল ঘোষিত কোড। পয়েন্টটি জিজ্ঞাসা করছে যে কীভাবে সেখানে যাবেন তার পরিবর্তে আপনার কী প্রয়োজন।

আপনার বিশেষ ক্ষেত্রে এটি নীচের মত দেখতে পারে। প্রথমত, আপনি খুঁজে বের করতে হবে কি এটা যে আপনার জন্য, যে, বিমূর্ত আবিষ্কার খুঁজছি। আপনার ক্ষেত্রে, দেখে মনে হচ্ছে আপনার একটি তারিখ দরকার । কেবল কোনও তারিখই নয়, এটির কিছু মানক প্রতিনিধিত্ব রয়েছে। বলুন, আইএসও 8601 তারিখ। কমপক্ষে দুটি বাস্তবায়ন রয়েছে: প্রথমটি হ'ল আইএসও 8601-ফর্ম্যাট করা স্ট্রিং (বা অন্য কোনও ফর্ম্যাটের স্ট্রিং) থেকে পার্স করা তারিখ এবং দ্বিতীয়টি ভবিষ্যতের তারিখ যা একদিন পরের। সুতরাং, পুরো কোডটি এর মতো দেখতে পেল:

(new Future(
    new DateTimeParsedFromISO8601('2009-09-30 20:24:00'),
    new OneDay()
))
    ->value();

DATETIME আকাশ গান সঙ্গে আরো উদাহরণের জন্য খুঁজে বার করো এই এক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.