जवाबों:
इस विधि पर काम करता है दोनों 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
इसके बावजूद, संरचित डेटा में तार लगाने पर यह हमेशा एक अच्छा प्रारंभिक बिंदु होता है। यह भविष्य में अजीब डिबगिंग को बचा सकता है। इसलिए मैं हमेशा दिनांक प्रारूप निर्दिष्ट करने की सलाह देता हूं।
स्ट्रैपटाइम () भी है जो बिल्कुल एक प्रारूप की उम्मीद करता है:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
date_parse_from_format
बजाय का उपयोग करने पर विचार करें strptime
।
strptime
विंडोज प्लेटफॉर्म में लागू नहीं है।
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');
जब तक आप स्थानीय डेट स्ट्रिंग्स के साथ काम कर रहे हैं, आसान विकल्प डेटाइम है।
!
मेरी तारीख पर आधारित टाइमस्टैम्प प्रत्येक रिफ्रेश पर बदल रहा था और मुझे पागल कर रहा था - क्योंकि डेटाइम वर्तमान समय को बिना पूछे या बताए जाने में मदद कर रहा था। गरर।
ऐसे कार्यों से सावधान रहें strtotime()
जो आपके "मतलब" का अनुमान लगाने की कोशिश करते हैं (यह निश्चित रूप से अनुमान नहीं करता है, नियम यहां हैं )।
वास्तव 22-09-2008
में 22 सितंबर 2008 को पार्स किया जाएगा , क्योंकि यह एकमात्र उचित चीज है।
कैसे होगी 08-09-2008
पार्स? संभवतः 09 अगस्त 2008 ।
किस बारे में 2008-09-50
? PHP के कुछ संस्करण इसे 20 अक्टूबर 2008 को पार्स करते हैं ।
इसलिए, यदि आप सुनिश्चित हैं कि आपका इनपुट DD-MM-YYYY
प्रारूप में है, तो @Armin Ronacher द्वारा प्रस्तुत समाधान का उपयोग करना बेहतर है ।
dd-mm-yyyy
, नहीं mm-dd-yyyy
।
YYYY-mm-dd
रूपांतरण में केवल उपयोगकर्ताओं को प्रदर्शित करने के लिए होता है
इस विधि पर काम करता है दोनों 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
इसके बावजूद, संरचित डेटा में तार लगाने पर यह हमेशा एक अच्छा प्रारंभिक बिंदु होता है। यह भविष्य में अजीब डिबगिंग को बचा सकता है। इसलिए मैं हमेशा दिनांक प्रारूप निर्दिष्ट करने की सलाह देता हूं।
Mktime का उपयोग करना :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
किसी कारण से कहीं बेहतर strtotime()
है, कुछ तिथियों पर काम नहीं करता है, और इसलिए बहुत अविश्वसनीय है।
स्ट्रेटोटाइम () फ़ंक्शन का उपयोग करके आप आसानी से टाइमस्टैम्प में तारीख बदल सकते हैं
<?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/
यहाँ 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);
यह मेरे लिए एक आकर्षण की तरह काम करता था।
यह देखते हुए कि फ़ंक्शन 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']);
यदि आप निश्चित रूप से जानना चाहते हैं कि क्या कोई तारीख आपसे अपेक्षित है, तो आप इसका उपयोग कर सकते हैं 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 मार्च हो सकता है , जहां से आप आते हैं पर निर्भर करता है :)
यदि आप प्रारूप का उपयोग जानते हैं strptime
क्योंकि प्रारूप के लिए strtotime
एक अनुमान है, जो हमेशा सही नहीं हो सकता है। चूंकि strptime
विंडोज में लागू नहीं किया गया है इसलिए एक कस्टम फ़ंक्शन है
याद रखें कि tm_year
वापसी 1900 से है! और 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)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
$time = '22-09-2008';
echo strtotime($time);
PHP फ़ंक्शन का उपयोग करें strtotime()
echo strtotime('2019/06/06');
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
यहाँ है कि मैं यह कैसे करूँगा:
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'];
इस तरह, आप फ़ंक्शन को जानते हैं कि आप किस दिनांक प्रारूप का उपयोग कर रहे हैं और यहां तक कि टाइमज़ोन भी निर्दिष्ट करें।
कृपया समय / क्षेत्र के बारे में सावधान रहें यदि आपने इसे डेटाबेस में तारीखों को बचाने के लिए सेट किया है, जैसा कि मुझे एक मुद्दा मिला जब मैंने 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)
यदि आप एक 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);