एक विशिष्ट समयक्षेत्र में php में सप्ताह का दिन कैसे खोजें


95

मैं तारीख / समय को संभालने के लिए php का उपयोग करते समय भ्रमित हूं।

मैं जो करने की कोशिश कर रहा हूं वह यह है: जब कोई उपयोगकर्ता मेरे पेज पर जाता है तो मैं उसका टाइमज़ोन पूछ रहा होता हूं और फिर उसके टाइमज़ोन में 'सप्ताह का दिन' प्रदर्शित करता हूं।

मैं ब्राउज़र के दिन का उपयोग नहीं करना चाहता। मैं यह गणना php में करना चाहता हूं।

मैं इसे प्राप्त करने की कोशिश कर रहा हूं:

  1. उपयोगकर्ता द्वारा दर्ज किया गया समयक्षेत्र
  2. यूनिक्स समय स्टाम्प की गणना php समय () फ़ंक्शन द्वारा की जाती है।

लेकिन मुझे नहीं पता कि कैसे आगे बढ़ना है ... मुझे इस टाइमज़ोन में 'सप्ताह का दिन' कैसे मिलेगा।

जवाबों:


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

जहाँ $ dw 6 (शनिवार के लिए) शनिवार (शनिवार के लिए) होगा जैसा कि आप यहाँ देख सकते हैं: http://www.php.net/manual/en/function.date.php


65
Php 5.1.0 के बाद से आप सोमवार से शुरू होने वाले मान date("N", $timestamp)प्राप्त करने के लिए उपयोग कर सकते हैं 1..7। पुराने संस्करणों में आप सोमवार से शुरू होने वाले मूल्यों (date("w", $timestamp) + 6) % 7को प्राप्त करने के लिए चाल का उपयोग कर सकते हैं 0..6
ऑलुकमैन

22
मैं बड़ी उलझन में हूं। इसके पास इतने वोट कैसे हैं? प्रश्न यह है कि सप्ताह का दिन एक विशिष्ट समय क्षेत्र में कैसे प्राप्त किया जाए, न कि वेबसर्वर के समय क्षेत्र में, और न ही जीएमटी में। यह प्रश्न के पहले भाग का उत्तर देता है, लेकिन प्रश्न के दूसरे भाग की पूरी तरह से उपेक्षा करता है।
tfinniga

6
@tfinniga, मुझे लगता है कि इसका कारण यह है कि बहुत से लोग इस सवाल पर आते हैं कि सप्ताह का दिन कैसे प्राप्त करें (जैसा मैंने किया), और फिर उसे वोट दें, क्योंकि यह उनके प्रश्न का उत्तर देता है :)
dav

ध्यान रखें कि तारीख () और mktime () केवल तब तक काम करते हैं जब तक आप UNIX युग (1970 - 2038 / 0x0 - 0x7FFFFFFF सेकंड में) में चले जाते हैं। नई पीएचपी "दिनांक और समय संबंधित एक्सटेंशन" का प्रयोग करें
eosphere

1
@dav वाह, आप शायद सही हैं, लेकिन यह वास्तव में एक बुरा कारण है। मुझे लगता है कि मैं औसत php डेवलपर के बारे में मजबूत राय विकसित करना शुरू कर रहा हूं।
tfinniga

117

मेरा समाधान यह है:

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

आउटपुट है: Tuesday

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

आउटपुट है: Tue


यह खूबसूरती से काम करता है। मैंने तारीख ('डी', स्ट्रॉटटाइम ($ DATE)) का इस्तेमाल किया। मेरा $ DATE का चर पहले से ही सही प्रारूप में था। मैंने इसका उपयोग एक रिपोर्टिंग डेटाबेस में डॉव की पहचान करने के लिए किया था। कई तिथियों में खोज करते समय, कि थोड़ा अतिरिक्त डॉव संक्षिप्त नाम अच्छा है।
user208145

21

मुझे लगता है कि यह सही उत्तर है, बस Europe/Stockholmउपयोगकर्ताओं के समय-क्षेत्र में परिवर्तन करें।

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

सप्ताह के दिन का ISO-8601 संख्यात्मक निरूपण (PHP 5.1.0 में जोड़ा गया) 1 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

यदि आप उनके टाइमज़ोन ऑफसेट प्राप्त कर सकते हैं, तो आप इसे वर्तमान टाइमस्टैम्प में जोड़ सकते हैं और फिर उनके स्थानीय समय को प्राप्त करने के लिए gmdate फ़ंक्शन का उपयोग कर सकते हैं।

// 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);

यह काम करना चाहिए (यह परीक्षण नहीं है, इसलिए YMMV)। यह स्क्रिप्ट के वर्तमान टाइमज़ोन को संग्रहीत करके काम करता है, इसे उपयोगकर्ता द्वारा निर्दिष्ट सप्ताह में दिन के दिन प्राप्त करने के लिए इसे बदलनाdate() निर्दिष्ट टाइमस्टैम्प पर फ़ंक्शन , और फिर स्क्रिप्ट के टाइमज़ोन को वापस सेट करना है कि इसके साथ क्या शुरू करना था।

आपके पास टाइमज़ोन पहचानकर्ताओं के साथ कुछ रोमांच हो सकते हैं, हालांकि।


2

"सप्ताह का दिन" वास्तव में कुछ है जिसे आप क्रमशः php दिनांक () फ़ंक्शन "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);
}

हालांकि इसका उपयोग हो सकता है, यह प्रश्न का उत्तर नहीं देता है।
18

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

मानक भागों के मानक पत्र-आधारित निरूपण महान हैं, इस तथ्य को छोड़कर कि वे इतने सहज नहीं हैं। बहुत अधिक सुविधाजनक तरीका बुनियादी अमूर्तताओं और कई विशिष्ट कार्यान्वयनों की पहचान करना है। इसके अलावा, इस दृष्टिकोण के साथ, आप स्वतः पूर्णता से लाभ उठा सकते हैं।

चूँकि हम यहाँ डेटासेट के बारे में बात कर रहे हैं, ऐसा लगता है कि मूल अमूर्त है ISO8601DateTime। विशिष्ट कार्यान्वयन में से एक वर्तमान डेटाटाइम है, जिसकी आपको आवश्यकता होती है जब आपके बैकेंड से अनुरोध करता है, इसलिए Now()कक्षा। दूसरा जो आपके लिए कुछ उपयोग का है वह कुछ टाइमजोन के लिए समायोजित एक डेटाइम है। आश्चर्य नहीं, यह कहा जाता है AdjustedAccordingToTimeZone। और अंत में, आपको एक पारित डेटाइम टाइमज़ोन में सप्ताह का एक दिन चाहिए: इसके लिए एक LocalDayOfWeekवर्ग है। तो कोड निम्न जैसा दिखता है:

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

इस दृष्टिकोण के बारे में अधिक जानकारी के लिए, यहां देखें


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

हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
andreas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.