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




date timestamp (16)

यदि आप प्रारूप का उपयोग strptime जानते हैं क्योंकि strptime प्रारूप के लिए अनुमान लगाता है, जो हमेशा सही नहीं हो सकता है। चूंकि strptime में strptime लागू नहीं किया गया है, इसलिए एक कस्टम फ़ंक्शन है

याद रखें कि वापसी का समय tm_year 1 9 00 से है! और tm_month 0-11 है

उदाहरण:

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

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


वहाँ 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);


यहां बताया गया है कि मैं इसे कैसे करूंगा:

function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
    //returns an array containing day start and day end timestamps
    $old_timezone=date_timezone_get();
    date_default_timezone_set($timezone);
    $date=strptime($date,$format);
    $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
    $day_end=$day_start+(60*60*24);
    date_default_timezone_set($old_timezone);
    return array('day_start'=>$day_start, 'day_end'=>$day_end);
}

$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];

इस तरह, आप फ़ंक्शन को बताते हैं कि आप किस दिनांक प्रारूप का उपयोग कर रहे हैं और यहां तक ​​कि टाइमज़ोन निर्दिष्ट भी करते हैं।


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

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


यदि आप इसे डेटाबेस में तिथियों को सहेजने के लिए सेट करते हैं, तो कृपया समय / क्षेत्र के बारे में सावधान रहें, क्योंकि जब मुझे 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)


mktime का उपयोग करना:

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);

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

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


यदि आप एक यूटीसी 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);

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


यदि आपके पास PHP 5.3 या इससे ऊपर है,

यह विधि विंडोज और यूनिक्स दोनों पर काम करती है और समय-क्षेत्र जागरूक है, जो शायद आप चाहते हैं कि आप तिथियों के साथ काम करने के बारे में गंभीर हैं।

यदि आपको टाइमज़ोन की परवाह नहीं है, या आपके सर्वर का उपयोग करने वाले समय क्षेत्र का उपयोग करना चाहते हैं:

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();

12220 9 3324 (यह आपके सर्वर समय क्षेत्र के आधार पर भिन्न होगा ...)


यदि आप निर्दिष्ट समय क्षेत्र में निर्दिष्ट करना चाहते हैं, तो यहां ईएसटी। (न्यूयॉर्क के समान ही।)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();

1222093305


या यदि आप यूटीसी का उपयोग करना चाहते हैं। ("जीएमटी" के समान।)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();

1222093289



यह देखते हुए कि फ़ंक्शन 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']);

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

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

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

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

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


यदि आप यह सुनिश्चित करना चाहते हैं कि किसी दिनांक को आपकी अपेक्षा की जाने वाली किसी चीज़ में पार्स किया गया है, तो आप 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 मार्च हो सकता है, इस पर निर्भर करता है कि आप कहां से आए हैं :)


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