PHP में टाइमस्टैम्प में तारीख कैसे बदलें?


350

मैं उदाहरण के लिए टाइमस्टैम्प कैसे प्राप्त करूं 22-09-2008?

जवाबों:


612


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

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

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

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


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

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305


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

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289


इसके बावजूद, संरचित डेटा में तार लगाने पर यह हमेशा एक अच्छा प्रारंभिक बिंदु होता है। यह भविष्य में अजीब डिबगिंग को बचा सकता है। इसलिए मैं हमेशा दिनांक प्रारूप निर्दिष्ट करने की सलाह देता हूं।


2
सुरुचिपूर्ण। मैं उसके बारे में भूल गया था!
जब तक

53
यह कैसे है कि आप अभी तक इस जवाब के लिए क्रेडिट नहीं मिला है ?!
मार्क टॉमलिन

4
एक पूरी तरह से मान्य उत्तर, लेकिन मुझे आश्चर्य है कि आर्मिन रॉनचेर के उत्तर ने इसे अपवोट में मिलान नहीं किया है - अस्पष्टता हमेशा खराब है।
RonLugge

1
@ अच्छा, ऐसा लगता है, मेरे सर्वर पर, वह प्रारूप समर्थित नहीं है। शायद यह आपके साथ अलग है।
लुकास

1
इस समाधान से अप्रत्याशित व्यवहार हो सकता है। जो लोग PHP 5.3+ का उपयोग करते हैं, उन्हें प्रो। फालकेन उत्तर को अपनाना चाहिए , जिसमें किसी का तिथि प्रारूप पर पूर्ण नियंत्रण होता है।
लुका फागियोली

185

स्ट्रैपटाइम () भी है जो बिल्कुल एक प्रारूप की उम्मीद करता है:

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

4
इसे tm_mon के बजाय tm_mon और tm_day के बजाय tm_day होना चाहिए
amarillion

68
खबरदार, strptime फ़ंक्शन विंडोज पर उपलब्ध नहीं है।
understack

12
Windows और PHP 5.3.0+ पर, के date_parse_from_formatबजाय का उपयोग करने पर विचार करें strptime
एरविन वेसल

1
... क्योंकि strptimeविंडोज प्लेटफॉर्म में लागू नहीं है।
रेंडेल

चूंकि यह एक अत्यधिक मतदान वाला उत्तर है, तो क्या आप इसे ऐसे उत्तर पर संपादित करने पर विचार करेंगे, जो विंडोज़ के साथ-साथ PHP के लिए भी यूनिक्स पर काम करता हो? और IMHO आदर्श रूप में इसे टाइमज़ोन का उल्लेख करना चाहिए।
प्रो। फॉकन कॉन्ट्रैक्ट

126

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एपीआई का उपयोग करने के लिए एक और विकल्प है :

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

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


15
मैं आजकल अपने उत्तर की सिफारिश करूंगा।
तक

Arggg। ! मत भूलो कि ! मेरी तारीख पर आधारित टाइमस्टैम्प प्रत्येक रिफ्रेश पर बदल रहा था और मुझे पागल कर रहा था - क्योंकि डेटाइम वर्तमान समय को बिना पूछे या बताए जाने में मदद कर रहा था। गरर।

मैं यह जोड़ना चाहता हूं कि मैं अस्पष्ट तिथि पार्सिंग के खिलाफ सलाह देता हूं, और यह कि तारीख प्रारूप स्पष्ट रूप से दिया जाना चाहिए जब स्ट्रिंग को पार्स किया जाए।
प्रो। फाल्कन कॉन्ट्रैक्ट

114

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

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

कैसे होगी 08-09-2008पार्स? संभवतः 09 अगस्त 2008

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

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


5
मान्य चिंता। मुझे लगता है कि स्ट्रेटोटाइम () आपके लोकेल में निर्भर करता है।
जब तक

13
नोट: अधिकांश गैर-अंग्रेजी भाषी देशों पर, प्रारूप है dd-mm-yyyy, नहीं mm-dd-yyyy
कैमिलो मार्टिन

1
@CamiloMartin अधिकांश गैर-अंग्रेजी भाषी देश आपके द्वारा बताए गए पहले प्रारूप का उपयोग करते हैं, लेकिन डीबी आमतौर पर तारीख को स्टोर करता है YYYY-mm-ddरूपांतरण में केवल उपयोगकर्ताओं को प्रदर्शित करने के लिए होता है
Danny22

@ डैनीजी ने केवल डॉक्स को देखा और ऐसा लगता है कि आप सही हैं यदि DB का मतलब है MySQL। लेकिन ऐसा करना हास्यास्पद लगता है ...
कैमिलो मार्टिन

57


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

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

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

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


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

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305


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

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289


इसके बावजूद, संरचित डेटा में तार लगाने पर यह हमेशा एक अच्छा प्रारंभिक बिंदु होता है। यह भविष्य में अजीब डिबगिंग को बचा सकता है। इसलिए मैं हमेशा दिनांक प्रारूप निर्दिष्ट करने की सलाह देता हूं।


हे फल्केन, आपका स्वागत है। हालांकि यह शायद बेहतर है कि यह समाधान PHP 5.3+
लुका फागियोली

43

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

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

यही मैंने हमेशा किया है। इसे विस्फोट करें - या / या। या जो कुछ भी उस पर अलग किया गया है, तो mktime।
रिच ब्रैडशॉ

1
Mktime फ़ंक्शन के अंतिम पैरामीटर के लिए PHP मैनुअल में एक नोट है: "PHP 5.1.0 के रूप में, यह पैरामीटर पदावनत हो गया। नतीजतन, इसके बजाय नए टाइमज़ोन हैंडलिंग सुविधाओं का उपयोग किया जाना चाहिए।" मुझे अभी तक पता नहीं चला है कि वे कौन सी नई सुविधाएँ हैं जो वे इसके बारे में बोलते हैं, क्योंकि वे इससे जुड़ी नहीं हैं!
अत्यधिक अनियमित

यह strtotime()किसी कारण से कहीं बेहतर strtotime()है, कुछ तिथियों पर काम नहीं करता है, और इसलिए बहुत अविश्वसनीय है।
dspacejs

17

स्ट्रेटोटाइम () फ़ंक्शन का उपयोग करके आप आसानी से टाइमस्टैम्प में तारीख बदल सकते हैं

<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');

//define date and time
$date = date("d M Y H:i:s");

// output
echo strtotime($date);
?> 

अधिक जानकारी: http://php.net/manual/en/function.strtotime.php

ऑनलाइन रूपांतरण उपकरण: http://freeonlinetools24.com/


भविष्य के पाठकों के लिए - स्ट्रेटोटाइम () एक दुर्घटना थी और इसका उपयोग प्रोत्साहित नहीं किया जाना चाहिए। यह अस्पष्ट है, क्योंकि यह तिथि प्रारूप पर अनुमान लगाने की कोशिश करता है। यहां तक ​​कि अगर आप इसे सही तरीके से उपयोग करते हैं, तो यह आपके कोड को समझने और तर्क करने के लिए कठिन बना देता है और आप अपने कोड आधार में किए जा रहे बदलाव के जोखिम को चलाते हैं, जो त्रुटियों को पेश करेगा, क्योंकि कोई फर्क नहीं पड़ता कि आप स्ट्रेटोटाइम () को क्या देते हैं। यह अनुमान लगाना सबसे अच्छा है। यह अनुमान गलत हो सकता है, लेकिन आपको ऐसा कोई संकेत नहीं मिलेगा, जिसका गलत अनुमान लगाया गया हो। यह एक फुटगन है। यदि आपको पसंद है, तो इसका उपयोग करें, लेकिन नौसिखिए उपयोगकर्ता मेरे विचार से एक चेतावनी का उपयोग कर सकते हैं। सावधानी: फुटगुन आगे
प्रो।

12

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

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


ध्यान दें कि स्प्लिट () अब पदावनत हो गया है, लेकिन यदि आप ol 'php वर्जन का उपयोग कर रहे हैं, तो यह बढ़िया काम कर रहा है!
ह्यूगो एच

6

यह देखते हुए कि फ़ंक्शन strptime()विंडोज के लिए काम नहीं करता है और strtotime()अप्रत्याशित परिणाम वापस कर सकता है, मैं उपयोग करने की सलाह देता हूं 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']);

2
नोट: स्ट्रेटोटाइम () के साथ: विभाजक एक स्लैश (/) है, फिर अमेरिकी एम / डी / वाई मान लिया गया है; जबकि यदि विभाजक पानी का छींटा (-) या डॉट (।) है, तो यूरोपीय डमी प्रारूप मान लिया गया है। इसलिए मुझे लगता है कि स्ट्रिपटाइम () का उपयोग करने की आवश्यकता नहीं है
secretlm

6

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


1
DateTime::createFromFormat falseत्रुटि पर रिटर्न , नहीं null
एमपीएन

5

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

याद रखें कि tm_yearवापसी 1900 से है! और tm_month0-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)



4

PHP फ़ंक्शन का उपयोग करें strtotime()

echo strtotime('2019/06/06');

दिनांक - स्थानीय समय / दिनांक को प्रारूपित करें


उन्होंने कहा, टाइमस्टैम्प के लिए तारीख, तारीख का समय नहीं
शमूएल पेट्रोसियन

अब इसे जांचें।
गुरप्रीत सिंह

3
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

3
<?php echo date('U') ?>

आप चाहें तो इसे MySQL इनपुट टाइप टाइमस्टैम्प में डालें । उपरोक्त बहुत अच्छी तरह से काम करता है (केवल PHP 5 या बाद में):

<?php $timestamp_for_mysql = date('c') ?>

3

यहाँ है कि मैं यह कैसे करूँगा:

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

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


0

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

-4

यदि आप एक UTC डेटाइम ( 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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.