PHP में दिनांक को टाइमस्टैम्प में कैसे परिवर्तित करें?




date timestamp (13)

PHP का strtotime() देता है

$timestamp = strtotime('22-09-2008');

जो समर्थित दिनांक और समय प्रारूप डॉक्स के साथ काम करता है।

मैं 22-09-2008 से टाइमस्टैम्प कैसे प्राप्त करूं?



यदि आप इसे डेटाबेस में तिथियों को सहेजने के लिए सेट करते हैं, तो कृपया समय / क्षेत्र के बारे में सावधान रहें, क्योंकि जब मुझे mysql से तिथियों की तुलना की गई तो strtotime का उपयोग करके timestamp परिवर्तित होने पर मुझे कोई समस्या मिली। दिनांक को टाइमस्टैम्प में कनवर्ट करने से पहले आपको एक ही समय / क्षेत्र का उपयोग करना होगा अन्यथा, strtotime () डिफ़ॉल्ट सर्वर टाइमज़ोन का उपयोग करेगा।

कृपया यह उदाहरण देखें: https://3v4l.org/BRlmV

function getthistime($type, $modify = null) {
    $now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
    if($modify) {
        $now->modify($modify);
    }
    if(!isset($type) || $type == 'datetime') {
        return $now->format('Y-m-d H:i:s');
    }
    if($type == 'time') {
        return $now->format('H:i:s');
    }
    if($type == 'timestamp') {
        return $now->getTimestamp();
    }
}
function timestampfromdate($date) {
    return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}

echo getthistime('timestamp')."--".
    timestampfromdate(getthistime('datetime'))."--".
    strtotime(getthistime('datetime'));

//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)

यदि आप एक यूटीसी 2016-02-14T12:24:48.321Z ( 2016-02-14T12:24:48.321Z ) को टाइमस्टैंप में कनवर्ट करना चाहते हैं, तो यहां आप यह कैसे करेंगे:

function UTCToTimestamp($utc_datetime_str)
{
    preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
    $datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];

    return strtotime($datetime_str);
}

$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);

यदि आप यह सुनिश्चित करना चाहते हैं कि किसी दिनांक को आपकी अपेक्षा की जाने वाली किसी चीज़ में पार्स किया गया है, तो आप DateTime::createFromFormat() उपयोग कर सकते हैं:

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
    die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22

यह इस मामले में स्पष्ट है, लेकिन उदाहरण के लिए 03-04-2008 अप्रैल से 4 अप्रैल या 4 मार्च हो सकता है, इस पर निर्भर करता है कि आप कहां से आए हैं :)


यह देखते हुए कि फ़ंक्शन strptime() विंडोज के लिए काम नहीं करता है और date_parse_from_format() अप्रत्याशित परिणाम लौटा सकता है, मैं date_parse_from_format() का उपयोग करने की सलाह देता हूं:

$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);

वहाँ strptime() भी है जो वास्तव में एक प्रारूप की अपेक्षा करता है:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);

DateTime एपीआई के साथ:

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

प्रक्रियात्मक एपीआई के साथ ही:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

यदि उपरोक्त विफल रहता है क्योंकि आप असमर्थित प्रारूप का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

ध्यान दें कि यदि आप सेट नहीं करते हैं ! , समय का हिस्सा वर्तमान समय पर सेट किया जाएगा, जो पहले चार से अलग है जो मध्यरात्रि का उपयोग करेगा जब आप समय छोड़ देंगे।

फिर भी एक और विकल्प IntlDateFormatter API का उपयोग करना है:

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

जब तक आप स्थानीयकृत दिनांक तारों के साथ काम नहीं कर रहे हैं, तो आसान विकल्प डेटटाइम की संभावना है।


split और mtime फ़ंक्शंस का उपयोग करके यहां एक बहुत ही सरल और प्रभावी समाधान है:

$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); 

//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);

यह मेरे लिए एक आकर्षण की तरह काम किया।


strtotime() जैसे फ़ंक्शंस से सावधान रहें जो आपके अनुमान के "अनुमान लगाने" का प्रयास करते हैं (यह निश्चित रूप से अनुमान नहीं लगाता है, नियम यहां हैं )।

वास्तव में 22-09-2008 को 22 सितंबर 2008 को पार्स किया जाएगा, क्योंकि यह एकमात्र उचित बात है।

08-09-2008 कैसे पार्स किया जाएगा? शायद 09 अगस्त 2008

2008-09-50 बारे में क्या? PHP के कुछ संस्करण इसे 20 अक्टूबर 2008 को पार्स करते हैं।

इसलिए, यदि आप सुनिश्चित हैं कि आपका इनपुट DD-MM-YYYY प्रारूप में है, तो @Armin Ronacher द्वारा प्रदान किए गए समाधान का उपयोग करना बेहतर है।


$time = '22-09-2008';
echo strtotime($time);


function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
    $return = false;
    $_timezone = date_default_timezone_get();
    date_default_timezone_set( $timezone );
    if( preg_match( $expression, $date, $matches ) )
        $return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
    date_default_timezone_set( $_timezone );
    return $return;
}

// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';

//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30




timestamp