কীভাবে একটি নির্দিষ্ট টাইম জোনে পিএইচপি তে সপ্তাহের দিন খুঁজে পাবেন


97

তারিখ / সময় পরিচালনা করতে পিএইচপি ব্যবহার করার সময় আমি বিভ্রান্ত হয়ে পড়েছি।

আমি যা করার চেষ্টা করছি তা হ'ল: কোনও ব্যবহারকারী যখন আমার পৃষ্ঠাতে যান আমি তার টাইমজোন জিজ্ঞাসা করি এবং তারপরে তার টাইমজোনটিতে 'সপ্তাহের দিন' প্রদর্শন করি।

আমি ব্রাউজারের দিনটি ব্যবহার করতে চাই না। আমি পিএইচপি এই হিসাব করতে চাই।

এইভাবেই আমি এটি অর্জনের চেষ্টা করছি:

  1. সময় অঞ্চলটি ব্যবহারকারী দ্বারা প্রবেশ করানো হয়েছে
  2. ইউনিক্স টাইম স্ট্যাম্প পিএইচপি সময় () ফাংশন দ্বারা গণনা করা হয়।

তবে কীভাবে এগিয়ে যেতে হবে তা আমি জানি না ... আমি এই টাইমজোনটিতে কীভাবে 'সপ্তাহের দিন' পাব।

উত্তর:


146
$dw = date( "w", $timestamp);

$ Dw যেখানে 0 (রবিবারের জন্য) 6 এর মধ্যে হবে (শনিবারের জন্য) আপনি এখানে দেখতে পারেন: http://www.php.net/manual/en/function.date.php


65
পিএইচপি 5.1.0 থেকে আপনি সোমবার থেকে শুরু করে মান date("N", $timestamp)পেতে ব্যবহার করতে পারেন 1..7। পুরানো সংস্করণগুলিতে আপনি সোমবার থেকে মান শুরু (date("w", $timestamp) + 6) % 7করতে কৌশলটি ব্যবহার করতে পারেন 0..6
অলকিম্যান

22
আমি খুব সন্দিহান. এই কিভাবে এত ভোট আছে? ওয়েবসার্ভারের সময় অঞ্চল নয়, জিএমটি নয়, কীভাবে একটি নির্দিষ্ট সময় অঞ্চলে সপ্তাহের দিনটি পাবেন তা প্রশ্ন। এটি প্রশ্নের প্রথম অংশটির উত্তর দেয়, তবে প্রশ্নের দ্বিতীয় অংশটিকে সম্পূর্ণ উপেক্ষা করে।
tfinniga

6
@ তফিনিগা, আমি মনে করি যে কারণটি হ'ল যে সপ্তাহের দিনটি (যেমনটি আমি করেছি) কীভাবে পাওয়া যায় সে সম্পর্কে অনুসন্ধান করার সময় অনেকে এই প্রশ্নে আসে এবং তারপরে এটিই ভোট দিয়ে দেয় কারণ এটি তাদের প্রশ্নের উত্তর দেয় :)
ডেভ

সচেতন থাকুন যে তারিখ () এবং এমকিটাইম () আপনি যতক্ষণ ইউএনআইএক্স যুগে চলে যান ততক্ষণ কাজ করে (1970 - 2038 / 0x0 - 0x7FFFFFF সেকেন্ডে)। নতুন পিএইচপি "তারিখ এবং সময় সম্পর্কিত এক্সটেনশানগুলি" ব্যবহার করুন
ইওস্ফিয়ার

4
@ ডেভ ওয়াও, আপনি সম্ভবত সঠিক, তবে এটি খুব খারাপ কারণ বলে মনে হচ্ছে। আমার মনে হয় আমি গড় পিএইচপি বিকাশকারী সম্পর্কে দৃ strong় মতামত বিকাশ করা শুরু করছি।
tfinniga

117

আমার সমাধানটি হ'ল:

$tempDate = '2012-07-10';
echo date('l', strtotime( $tempDate));

আউটপুট হল: Tuesday

$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));

আউটপুট হল: Tue


এটি সুন্দরভাবে কাজ করে। আমি তারিখ ('ডি', স্ট্রোটোটাইম (ATE DATE)) ব্যবহার করেছি। আমার ATE তারিখের পরিবর্তনশীলটি ইতিমধ্যে সঠিক ফর্ম্যাটে ছিল। আমি তৈরি করা একটি রিপোর্টিং ডাটাবেসে ডাউ সনাক্ত করতে এটি ব্যবহার করেছি। একাধিক তারিখ জুড়ে অনুসন্ধান করার সময়, সেই অতিরিক্ত অতিরিক্ত DOW সংক্ষেপণটি রাখা ভাল।
ব্যবহারকারী208145

22

আমি মনে করি এটি সঠিক উত্তর, কেবলমাত্র Europe/Stockholmব্যবহারকারীদের সময়-অঞ্চলে পরিবর্তন করুন ।

$dateTime = new \DateTime(
    'now',
    new \DateTimeZone('Europe/Stockholm')
);
$day = $dateTime->format('N');

আইএসও -8601 সপ্তাহের দিনের সংখ্যার উপস্থাপনা (পিএইচপি 5.1.0 এ যোগ করা হয়েছে) 1 (সোমবারের জন্য) 7 এর মাধ্যমে (রবিবারের জন্য)

http://php.net/manual/en/function.date.php

সমর্থিত সময় অঞ্চলগুলির তালিকার জন্য, http://php.net/manual/en/timezones.php দেখুন


20

আপনার দ্রুত মন্তব্যের জন্য অনেক ধন্যবাদ।

আমি এখন এটি ব্যবহার করব। ফাংশনটি এখানে পোস্ট করা হচ্ছে যাতে কেউ এটি ব্যবহার করতে পারে।

public function getDayOfWeek($pTimezone)
{

    $userDateTimeZone = new DateTimeZone($pTimezone);
    $UserDateTime = new DateTime("now", $userDateTimeZone);

    $offsetSeconds = $UserDateTime->getOffset(); 
    //echo $offsetSeconds;

    return gmdate("l", time() + $offsetSeconds);

}

কোনও সংশোধন পেলে রিপোর্ট করুন।



5

যদি আপনি তাদের টাইমজোন অফসেট পেতে পারেন তবে আপনি এটি কেবল বর্তমান টাইমস্ট্যাম্পে যুক্ত করতে পারেন এবং তারপরে স্থানীয় সময় পেতে জিএমডিট ফাংশনটি ব্যবহার করতে পারেন ।

// let's say they're in the timezone GMT+10
$theirOffset = 10;  // $_GET['offset'] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);

3
$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date('l', $userTimestamp);
date_default_timezone_set($myTimezone);

এটি কাজ করা উচিত (এটি পরীক্ষা করে নি, তাই ওয়াইএমএমভি)। এটি স্ক্রিপ্টের বর্তমান টাইমজোন সংরক্ষণ করে ব্যবহারকারীর দ্বারা নির্দিষ্ট করা একটিতে পরিবর্তিত করে date(), নির্দিষ্ট টাইমস্ট্যাম্পে ফাংশন থেকে সপ্তাহের দিন পেয়ে এবং তারপরে স্ক্রিপ্টের টাইমজোনটি আবার কী দিয়ে শুরু করা উচিত তা সেট করে কাজ করে।

যদিও টাইমজোন শনাক্তকারীদের সাথে আপনার কিছু অ্যাডভেঞ্চার থাকতে পারে।


2

"সপ্তাহের দিন" আসলে এমন কিছু যা আপনি পিএইচপি তারিখ () ফাংশন থেকে যথাক্রমে "l" বা "N" ফর্ম্যাটের সাথে পেতে পারেন। কটাক্ষপাত আছে ম্যানুয়াল

সম্পাদনা: দুঃখিত আমি কালিয়ামের পোস্টগুলি সঠিকভাবে পড়িনি, তিনি ইতিমধ্যে এটি ব্যাখ্যা করেছেন। আমার খারাপ।


2

শেষ সোমবার বা শেষ রবিবার পাওয়ার আগে চেকের তারিখটি সোমবার বা রবিবার

 public function getWeek($date){
    $date_stamp = strtotime(date('Y-m-d', strtotime($date)));

     //check date is sunday or monday
    $stamp = date('l', $date_stamp);      
    $timestamp = strtotime($date);
    //start week
    if(date('D', $timestamp) == 'Mon'){            
        $week_start = $date;
    }else{
        $week_start = date('Y-m-d', strtotime('Last Monday', $date_stamp));
    }
    //end week
    if($stamp == 'Sunday'){
        $week_end = $date;
    }else{
        $week_end = date('Y-m-d', strtotime('Next Sunday', $date_stamp));
    }        
    return array($week_start, $week_end);
}

যদিও এর ব্যবহার থাকতে পারে তবে এটি প্রশ্নের উত্তর দেয় না।
outis

2

রবিবার বা সোমবার থেকে শুরু হওয়া সপ্তাহের মধ্যে পরিবর্তন করতে একটি পতাকা সহ অন্য যে কোনও একটি সমাধানের ভিত্তিতে

function getWeekForDate($date, $weekStartSunday = false){

    $timestamp = strtotime($date);

    // Week starts on Sunday
    if($weekStartSunday){
        $start = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Sunday', $timestamp));
        $end = (date("D", $timestamp) == 'Sat') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Saturday', $timestamp));
    } else { // Week starts on Monday
        $start = (date("D", $timestamp) == 'Mon') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Monday', $timestamp));
        $end = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Sunday', $timestamp));
    }

    return array('start' => $start, 'end' => $end);
}

যদিও এর ব্যবহার থাকতে পারে তবে এটি প্রশ্নের উত্তর দেয় না।
outis

0

তারিখের অংশগুলির স্ট্যান্ডার্ড চিঠি-ভিত্তিক উপস্থাপনাগুলি এগুলি স্বজ্ঞাত নয় except অনেক বেশি সুবিধাজনক উপায় হ'ল বেসিক বিমূর্ততা এবং কয়েকটি নির্দিষ্ট বাস্তবায়ন শনাক্ত করা। এছাড়াও, এই পদ্ধতির সাহায্যে আপনি স্বয়ংক্রিয়তা থেকে উপকার পেতে পারেন।

আমরা datetimes সম্পর্কে এখানে কথা বলছি সাল থেকে, মনে হয়, মৌলিক বিমূর্ততা হয় ISO8601DateTime। নির্দিষ্ট বাস্তবায়নের অন্যতম বর্তমান DATETIME, এক আপনি প্রয়োজন যখন একটি আপনার ব্যাকএন্ড একটি অনুরোধ, অত করে তোলে Now()বর্গ। দ্বিতীয়টি যা আপনার জন্য কিছু উপযোগী তা হ'ল একটি ডেটটাইম কিছু সময় অঞ্চলকে সামঞ্জস্য করে। অবাক হওয়ার মতো বিষয় নয়, এটি বলা হয়AdjustedAccordingToTimeZone । এবং অবশেষে, আপনার পাসের তারিখের টাইমজোনটিতে সপ্তাহের একটি দিন দরকার: এর জন্য একটি LocalDayOfWeekশ্রেণি রয়েছে। কোডটি নীচের মত দেখাচ্ছে:

(new LocalDayOfWeek(
    new AdjustedAccordingToTimeZone(
        new Now(),
        new TimeZoneFromString($_POST['timezone'])
    )
))
    ->value();

এই পদ্ধতির সম্পর্কে আরও তথ্যের জন্য, এখানে একবার দেখুন


-1
echo date('l', strtotime('today'));

এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, যদিও সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
andreas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.